第一篇:贪吃蛇课程设计总结报告书
贪吃蛇课程设计总结报告书
110200第7组
组员:李轶萌 刘浩 赵鹏
一.需求分析
(1)功能与数据需求:题目要求的功能(基本功能)与 扩展功能 基本功能:贪吃蛇的蛇的移动(上下左右)
随机出现食物
蛇吃过后变长 记分功能
撞到自己或边界就失败等基础的功能
扩展功能:难易度的选择 背景音乐 空格暂停功能
容错功能(是否重新开始/结束游戏)
(2)开发环境
Vc6.0
二.概要设计(1)主要数据结构(2)程序总体结构(3)各模块函数说明 三 详细设计(1)主函数部分(2)游戏部分
(3)判断分数,是否继续部分 四.测试
图
五.应用程序功能的详细说明 规则:贪吃蛇在不首尾相碰且不碰边界的情况下,尽可能多的吃掉随机出现的食物,多吃多得分而益智的小游戏。
操作:上w下s左a右d 暂停 空格 退出或重新游戏肯定y 否定 n 六.总结提高(1)课程设计总结
(2)开发中遇到的问题和解决方法
开发之初,大家对这个程序都不是很了解,所以刚开始只追求把文件做出来,可以运行就可以了。但是后来发现自己做出来的东西连自己都提不起兴趣,单纯只有基本功能功能,没有记分功能,也没有暂停等等,画片也很糟糕,大小比例也有些失调,被老师戏称为“贪吃蚂蚁”。后来经过调试和自主创新,我们发现我们其实还是可以加入一些人性化的东西的。
(3)对自己完成课设完成情况的评价 附录:程序源代码
第二篇:贪吃蛇java课程设计
import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Snake extends JFrame {
private JPanel contentPane;//窗体内容网格
private JButton btnStart = new JButton(“开始”);//游戏开始按钮
private JButton btnPause = new JButton(“暂停”);//游戏暂停按钮
private JButton btnExit = new JButton(“退出”);//游戏退出按
private JPanel pnlTop = new JPanel();//顶部按钮和分数面板
private JPanel pnlLeft = new JPanel();//左侧面板
private JPanel playPanel = new JPanel();//游戏区面板
private BorderLayout borderLayout1 = new BorderLayout();//容器布局管理器
private BorderLayout borderLayout2 = new BorderLayout();
private GridLayout rbtnLayout = new GridLayout(10, 1, 1, 1);
private static final int UP = 1,LEFT = 2,DOWN = 3,RIGHT = 4;//蛇运动方向
private static final int ROWS = 30;//游戏区行数
private static final int COLS = 50;//游戏区列数
private boolean isPause = false;//游戏暂停标志
private boolean isEnd;//游戏结束标志
private SnakeBody snake;//贪食蛇
private int score = 0;//当前得分
SnakeThread thread = new SnakeThread();//游戏主线程
private GridLayout grid1 = new GridLayout(ROWS,COLS,0,0);//游戏区布局
private JButton[][] blocks;//游戏区的所有方块
JPanel jPanel2 = new JPanel();
JLabel jLabel1 = new JLabel(“得分:”);
JLabel lblScroe = new JLabel(“0”);
ButtonGroup buttonGroup1 = new ButtonGroup();
JRadioButton rbtnLow = new JRadioButton(“初级”, true);
JRadioButton rbtnMid = new JRadioButton(“中级”);
JRadioButton rbtnHigh = new JRadioButton(“高级”);
public Snake(){
super(“贪食蛇游戏”);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
contentPane =(JPanel)this.getContentPane();
contentPane.setLayout(borderLayout2);
this.setResizable(false);
this.setSize(new Dimension(512, 414));
keyAction keyAct = new keyAction();
this.addKeyListener(keyAct);
btnStart.addKeyListener(keyAct);
btnPause.addKeyListener(keyAct);
btnExit.addKeyListener(keyAct);
rbtnLow.addKeyListener(keyAct);
rbtnMid.addKeyListener(keyAct);
rbtnHigh.addKeyListener(keyAct);
btnAction btnAct = new btnAction();
btnStart.addActionListener(btnAct);
btnPause.addActionListener(btnAct);
btnExit.addActionListener(btnAct);
rbtnLow.addActionListener(btnAct);
rbtnMid.addActionListener(btnAct);
rbtnHigh.addActionListener(btnAct);
pnlLeft.setLayout(borderLayout1);
playPanel.setLayout(grid1);
playPanel.setBackground(Color.white);
playPanel.setBorder(BorderFactory.createEtchedBorder());
jPanel2.setLayout(rbtnLayout);
buttonGroup1.add(rbtnLow);
buttonGroup1.add(rbtnMid);
buttonGroup1.add(rbtnHigh);
rbtnLow.setSelected(true);
pnlLeft.add(playPanel);
pnlLeft.add(jPanel2, BorderLayout.WEST);
jPanel2.add(“f1”, rbtnLow);
jPanel2.add(“f2”, rbtnMid);
jPanel2.add(“f3”, rbtnHigh);
pnlTop.add(btnStart);
pnlTop.add(btnPause);
pnlTop.add(btnExit);
pnlTop.add(jLabel1);
pnlTop.add(lblScroe);
contentPane.add(pnlTop, BorderLayout.NORTH);
contentPane.add(pnlLeft, BorderLayout.CENTER);
//创建并初始化游戏区方块
blocks = new JButton[ROWS][COLS];
for(int i = 0;i < ROWS;i++){
for(int j = 0;j < COLS;j++){
blocks[i][j] = new JButton();
blocks[i][j].setBackground(Color.lightGray);
blocks[i][j].setVisible(false);
playPanel.add(blocks[i][j]);
}
}
}
public static void main(String[] args){
Snake app = new Snake();
app.validate();
app.setVisible(true);
}
public void start(){
snake = new SnakeBody();//创建蛇身
if(rbtnLow.isSelected())
snake.setSpeed(300);
if(rbtnMid.isSelected())
snake.setSpeed(200);
if(rbtnHigh.isSelected())
snake.setSpeed(100);
score = 0;
isPause = false;
isEnd = false;//
btnPause.setText(“暂停”);
//初始化游戏区
for(int i = 0;i < ROWS;i++){
for(int j = 0;j < COLS;j++){
blocks[i][j].setBackground(Color.lightGray);
blocks[i][j].setVisible(false);
}
}
//在游戏区内随机放置豆
int x =(int)(Math.random()* ROWS);
int y =(int)(Math.random()* COLS);
while(blocks[x][y].isVisible()){
x =(int)(Math.random()* ROWS);
y =(int)(Math.random()* COLS);
}
blocks[x][y].setBackground(Color.yellow);
blocks[x][y].setVisible(true);
try {
thread.start();
}
catch(IllegalThreadStateException illegalThreadStateException){}
}
class SnakeBody {
public int row[];
public int col[];
public int len = 3, direction = RIGHT, lastdirection = RIGHT;
public long speed = 300;
public SnakeBody(){
len = 3;
direction = RIGHT;
lastdirection = RIGHT;
row = new int[ROWS];
col = new int[COLS];
for(int i = 0;i <= len;i++){
row[i] = 1;
col[i] = len1];
col[i] = col[i-1];
}
//根据蛇身运动方向,决定蛇头位置
switch(direction){
case UP: {
if(lastdirection == DOWN)
row[0] += 1;
else {
row[0]-= 1;
lastdirection = UP;
}
break;
}
case LEFT: {
if(lastdirection == RIGHT)
col[0] += 1;
else {
col[0]-= 1;
lastdirection = LEFT;
}
break;
}
case DOWN: {
if(lastdirection == UP)
row[0]-= 1;
else {
row[0] += 1;
lastdirection = DOWN;
}
break;
}
case RIGHT: {
if(lastdirection == LEFT)
col[0]-= 1;
else {
col[0] += 1;
lastdirection = RIGHT;
}
break;
}
}
//当蛇头碰到墙时,蛇头碰到蛇身时,游戏结束
if(row[0] >= ROWS || row[0] < 0 || col[0] >= COLS || col[0] < 0 ||
blocks[row[0]][col[0]].getBackground().equals(Color.green)){
isEnd = true;
JOptionPane.showMessageDialog(null, “游戏结束!”);
}
//吃豆
if(blocks[row[0]][col[0]].getBackground().equals(Color.yellow)){
score += 100;
lblScroe.setText(Integer.toString(score));
if(score % 2000 == 0 && speed > 100){
JOptionPane.showMessageDialog(null, “恭喜你过关了,准备进入下一关”);
speed-= 100;
if(speed == 200)
rbtnMid.setSelected(true);
if(speed == 100)
rbtnHigh.setSelected(true);
}
}
//吃豆后,蛇身加长,并随机显示下一个豆
if(blocks[row[0]][col[0]].getBackground().equals(Color.yellow)){
len++;
int x, y;
x =(int)(Math.random()* ROWS);
y =(int)(Math.random()* COLS);
while(blocks[x][y].isVisible()){
x =(int)(Math.random()* ROWS);
y =(int)(Math.random()* COLS);
}
blocks[x][y].setBackground(Color.yellow);
blocks[x][y].setVisible(true);
}
blocks[row[0]][col[0]].setBackground(Color.green);
blocks[row[0]][col[0]].setVisible(true);//显示蛇头
}
}
class SnakeThread extends Thread {
public void run(){
while(true){
try {
Thread.sleep(snake.speed);//控制移动速度
if(!isEnd &&!isPause){
snake.move();//移动蛇身
}
if(isEnd){ //游戏结束
btnStart.setEnabled(true);
}
}
catch(Exception ex){}
}
}
}
class keyAction extends KeyAdapter {
public void keyPressed(KeyEvent e){
if(!isEnd &&!isPause){
//根据用户按键,设置蛇运动方向
if(e.getKeyCode()== KeyEvent.VK_UP){
snake.direction = UP;
}
if(e.getKeyCode()== KeyEvent.VK_DOWN){
snake.direction = DOWN;
}
if(e.getKeyCode()== KeyEvent.VK_LEFT){
snake.direction = LEFT;
}
if(e.getKeyCode()== KeyEvent.VK_RIGHT){
snake.direction = RIGHT;
}
}
}
}
//按钮监听响应处理类
private class btnAction implements ActionListener {
public void actionPerformed(ActionEvent ae){
Object source = ae.getSource();
if(source.equals(btnStart)){
btnStart.setEnabled(false);
start();
}
if(source.equals(btnPause)){
if(isPause == true){
btnPause.setText(“暂停”);
}
if(isPause == false){
btnPause.setText(“继续”);
}
isPause =!isPause;
}
if(source.equals(btnExit)){
System.exit(0);
}
if(source.equals(rbtnLow)){
snake.setSpeed(300);
}
if(source.equals(rbtnMid)){
snake.setSpeed(200);
}
if(source.equals(rbtnHigh)){
snake.setSpeed(100);
}
}
} }
第三篇:c语言程序贪吃蛇课程设计报告
高级语言程序设计 课程设计报告
Experiment Designing reporter 课程名称:高级语言程序设计
英文名称
: C Program Experiment Designing 专业:自动化 111 学号: XXX 姓名: XXX 指导教师: XXX
日期:
2012 年 6月 17日至 2011 年6 月 20 日 山东工商学院信电学院 一:课程设计内容 程序功能介绍
贪吃蛇游戏是一个经典小游戏,深受众多玩家喜爱,其规则是:一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束。此游戏不仅能锻炼人的思维敏捷性,而且还可以提高玩家的逻辑判断能力。设计思路
我们小组称设计本次课题——贪吃蛇的思路为“贪快速上手贪吃蛇三步曲”: 第一步:
寻找到一个真正可以运行的已用C编好的贪吃蛇。因为我们毕竟从未看到过用C编游戏的程序,让我们两手一抹黑的开始编写是有一定的困难的,如果我们自己找一个已经设计好的程序,以此为跳板实现我们想要达到的效果,那么肯定是高效的。所以我们组统一决定,去寻找一个可以运行的C编译的贪吃蛇。第二步:
运行游戏并了解游戏程序。
我们认为,只有你运行并了解一个游戏,才能知道游戏里需要什么样的改进和创新,如果你自己本身就没玩过这个游戏,那么你就是再有技术,你也永远改进和改编不了一个游戏,因为你根本不知道你在干什么。
同样重要的是了解游戏程序。因为只有看懂了程序,才能实现对他的改编,才能游刃有余。第三步:
寻找模块并分类,而后进行改编。
寻找到你想要改变的游戏内容的控制模块,比如,我想要增加一堵墙,那么就应该找到 void DrawK(void){
setcolor(11);
setlinestyle(SOLID_LINE,0,THICK_WIDTH);for(i=200;i<=500;i+=10)
rectangle(i,200,i+10,209);} 然后要找到:改变蛇初始长度、颜色、初始位置的模块,改变苹果出现位置的模块,让蛇见墙死的模块,让蛇吃苹果加长的模块„„„.并且进行分类,这样下次再想实现某个目标时,可以一目了然的进行改编。对于找到的模块如何进行改编呢?怎么才能知道某个数值或函数代表什么呢? 我们有两个方法:
1.)看名字,比如snakecolor(),很明显他的意思是蛇的颜色。2.)控制变量猜想,比如设置墙的时候for(i=200;i<=500;i+=10);
rectangle(i,300,i+10,309);中的200,500,300,209 代表什么呢?我们可以猜想:它很像是坐标上的(x,y)的格式,是不是呢?可可以先让其他数值不变,只让309改变,改变后发现上面的墙变粗了,由此可见这个数字控制的是一堵墙的最下面一行的坐标。
关于该程序的相关分析思路答题模板:
1.贪吃蛇程序流程图如下:
二.贪吃蛇程序的改编:
经过小组成员的认真研究我们对其进行了如下改编 第一步加墙 void DrawK(void){ /*setbkcolor(MAGENTA);*/
setcolor(5);//
可以改变颜色
setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/ 横向上的墙:
for(i=100;i<=600;i+=10)// 本行代表行坐标上:100代表墙的初始位置,i<=600代表墙的结尾。
{
rectangle(i,60,i+10,69);//本行代表纵坐标上:60代表墙的最上面一行的位置,69代表墙最下面一行的位置。69-60=9,9代表墙块的厚度 } 纵向上的墙:
for(i=100;i<=400;i+=10)//本行代表纵坐标上:100代表墙的初始位置,i<=400代表墙的结尾
{
rectangle(100,i,109,i+10);//本行代表纵坐标上:100代表墙的最左边面一行的位置,69代表墙最右面一行的位置。69-60=9,9代表墙块的宽度
} 我们认为本模块最重要的是for语句控制的坐标代表的意思。只要明白了坐标的意思,就可以实现对游戏的改编。
第二步就是进行对新加入的墙蛇是否撞上死亡
让蛇撞墙死
if(snake.x[0]>190&&snake.x[0]< 510&&snake.y[0]>=200&&
snake.y[0]<=215)
/*其中,对x,y范围的控制,实际是对蛇撞击的死亡区域的限制。*/
{
GameOver();/*本次游戏结束*/
snake.life=1;/*蛇死*/
} 相应的新添加的墙。
for(i=200;i<=500;i+=10)/*画围墙*/
{
rectangle(i,200,i+10,209);/*指定位置*/ 第三步食物的定点出现
if(food.yes==1)/*需要出现新食物*/ 这里说明一下:rand()产生0-65535的数,在limits.h里有定义%400后产生一个0-399的数+60 则为 60 –459,即:%400+60意思是在60~399之间随机产生一个数。
{
food.x=rand()%400+60;
food.y=rand()%350+60;
while(food.x%10!=0)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/
food.x++;
while(food.y%10!=0)
food.y++;
food.yes=0;/*画面上有食物了*/
} 如果将food.x=(常数a)那么食物就会出现在x=a行的随机列,对于food.y=(常数b)那么食物就出现在y=b列的随机行。
第四步对食物墙壁的颜色以及对蛇的运动速个性化调节
setcolor(4);// 对颜色的调整 int gamespeed=50000;/*游戏速度自己调整*/
通过改变变量的值,就可以个性化选择自己喜欢的颜色,这将是一场别开生面的游戏界面。* 红色代表解析浅蓝代表提示 三.课程设计总结 有言曰:“实践出真知”,在这几天的课程设计实践中,我们组三人真正的体会到了这句话的真谛。
在经历了一学期的C语言学习后,我们从以往的“纸上谈兵”直接过渡到“实际作战”。我们实现了让静态的程序变成动态的游戏效果,虽然我们只是改编了一下别人做好的程序,但我们同样由此获益匪浅,感触颇深,当然也发现了许多自己的不足。
首先,在我们刚刚进行第一步“寻找程序”的时候,就被搁浅了,因为我们发现,在网上能找到一个真正符合我们使用标准的程序很难,就是找到了几个也没有能运行它们的程序。我们花费了前两天的时间来寻找能够使用的程序和软件,但最后还是一无所获,正当我们一筹莫展的时候,我们的导师——杨老师给我们带来了曙光,使得我们在黑暗中找到了希望的光明,杨老师给我们传来了一个上届师哥做好的程序,并且把它的运行软件也给了我们,这对我们来说无疑是雪中送炭,得到这个程序后,我们三个人看到了C语言运行一个游戏的流程和方法,我们脑中也大概有了一个思路。我们三个人以此程序为跳板,直接开始对程序模块进行挑选,因为我们已经浪费了两天,所以我们决定进行分工作业,分别去寻找:筑墙模块,加苹果模块,撞墙死模块。最后我们用了一下午时间完成了三大步中的前两大步和第三步的第一部分,剩下的就是最重要而充满挑战的改编了,从以上的操作中,让我们明白了找对一个平台的重要性,这个平台就是老师给我们的程序,就是我们的前进方向。没有了方向了的征程,一开始就是个错误。在我们寻找程序模块的时候,我们对于程序中的很多东西都是模模糊糊的概念,比如struck是什么,比如for语句的使用,以及for语句的循环体是什么,当然我们也发现了定义字符在长的程序中的方便与重要性。还有就是我们发现程序在编写时的规范性很重要,比如同级别花括号的位置的对应,对应好了,模块就好找,对应不好就很乱。还有定义函数及变量的时候,函数名字和变量名最好是见名知意,比如我们所看的程序中,gamespeed,snakecolour,food.....在最后的攻坚阶段,为了实现对程序的改编,我们使用控制变量猜想法是正确的选择,比如设置墙的时候for(i=200;i<=500;i+=10);
rectangle(i,300,i+10,309);中的200,500,300,209 代表什么呢?我们猜想:它很像是坐标上的(x,y)的格式,是不是呢?我们先让其他数值不变,只让309改变,改变后发现上面的墙变粗了,由此我们知道这个数字控制的是一堵墙的最下面一行的坐标。我们用这个方法知道了其他很多数值的用途。我们用这种方法先是知道了如何设置一堵墙,在我们欣喜设置一堵墙以后才发现:蛇撞了墙后不死。在我们进行了全局来看以后才知道,原来设计一堵墙,都要再设计一个if语句来使得蛇在这个范围内会死亡。并且我们发现在设计这个if语句的时候,不仅要计算好墙的坐标,而且还要用好逻辑语言(&&,||!)同时语句的运算顺序也很重要。刚一开始我们忽略的&&和关系运算符级别的高低,使得我们设计的墙,总是撞不死蛇,为此我们很是恼火,着急的组员还在这里发生了点小摩擦,由此可见C语言的严谨性!
最后我们又通过在网上查找信息,知道了随机数发生器randomize()的用法:rand()=x%+d 意思是说在d~(x-1)之间随机产生一个数字。我们很自然的联想到,如果把food.x等于常数a;把food.y等于一个;x%+d的随机数,那不就能固定只在某一行出现苹果了吗?所以我们觉得,充分利用手边的资源也是很重要的,毕竟C语言很高深,课本上的东西总是有限的,要想知道更多的东西还需多练习,多查阅资料。总之:革命尚未成功,通知还需努力啊!四个人感受: 汤X:
就我个人而言,这次课程设计,我觉得我最大的收获就是:我明白了,我们其实真的没那么厉害,我们真的还有很多东西不会,我们真的连课本上的基本东西都没掌握,课本上的东西,真的也只是C语言这个大海中的一滴水而已。而在我本人还没有掌握好课本的知识点的情况下,做起这个程序自然很费事,一个简单的课本P293讲到的struct结构体,我一开始竟然忘记它是什么意思,不知道它是什么,就更不用谈怎么用它了。还有逻辑语言的使用。我想,现在肯定有很多同学还不知道逻辑运算的优先次序吧?这个问题我本人在使用逻辑语言的时候也不太会,还查看了书。像这些小的知识点,我个人认为如果掌握不好的话,是不可能让整个大程序运行起来的。还有比如我在遇到程序显示“else多余”的警告时候不不知所措,问了老师才知道是if()后面加了“;”而且if没有用“{}”来固定范围,这个错误原因是分号使得if语句结束了,孤立的else当然是多余的了。一个小小的分号使得程序无法运行,由此可见在今后的编程中,一定要注意谨慎,仔细。同时要注意记住平时编程的时候,出现的错误指示是什么意思。比如这次的“else多余”就是因为if后多了分号。还有在编程时候,书写一定要规范,特别是if语句的花括号的位置要对应起来,因为位置决定范围。注意定义变量和函数要使用规范的英文单词,这样才能见名知意,为以后修改找变量节省时间。对于这次课题中,“设计一个墙,就要对应一个函数舍得蛇撞墙死”,让我明白,C语言程序中各部分的联系性,牵一发而动全身,所以在编程时一定要注意全局的把握。我们最后还要说说在编程中,好好利用网络资源,因为课本里的东西总是有限的,而C语言又那么高深,像随机数发生器,还有颜色的定都是我第一次接触,这些东西的用处可是颇大,以后一定好好学习。多看,多练,多总结。最后还要感谢指导老师,杨老师对我学习的帮助和指导。徐XXX: 刚开始拿到题目时候什么也不会一片茫然,从网上找了一个程序一看,太吓人了,这么长怎么看啊,而且还是错误的。没办法只能硬着头皮去改了,但是在改的过程中才发现其实c语言没有想象的那么难而且还很有意思,只是自己平时没有好好学所以在改的时候非常吃力,有很多简单的知识都不知道,没有记住。没办法只能借助与课本了。但是几天下来发现自己已经不再像以前那样是个菜鸟了,虽然很多知识还没掌握。同时在编改程序的时候切记不能烦躁要静心慢慢来,好几次自己都因心燥出现了很多不该出现的错误浪费了很多时间。
对键盘的熟悉在编程时也是很重要的,自己在写的时候往往就是跟一指禅差不多眼睛盯着键盘打,打错了也不知道最后导致整个程序都是错误的,就因为一个打错了一个字母。
总的来说这次课程设计收获很多,也知道了自己的不足,在以后的学习中要多实践,实践很能提高自己的能力。刘XX:
4天的C语言课程设计上机学习让我感受颇多,每天都发现新的问题,又不得不绞尽脑汁解决问题,心情就像正弦函数,随着问题的出现和解决一起一伏。刚开始接触贪吃蛇的C语言成寻时,看着C-free上面出现的有十几个错误的程序,一片茫然不知所措。只能继续在网上搜索错误较少的程序,并结合书上的基础知识查看错误所在,最终发现是
作为小组中唯一的女生,明显感觉有压力,打字速度不如另外两个男生,对游戏和程序的敏感也不如他们强,有种小小的挫败感。旁边小组的同学也给我很大的压力。他们自己编写程序,我很佩服他们,越是这样想。心里越着急,越不能解决问题,每当感觉有压力的时候,就提醒自己心静,认真的看程序。在学习过程中,深深的发现了自己的不足之处,对于C语言,只学了一点点皮毛东西,想要学好C语言,编好程序,还要付出很多的努力,还要用更多的时间来学习C语言这门深奥的学科。现在只能借用别人已经写好的程序,在别人的基础上,一点点进步和学习,比如程序中筑墙,需要仿照已有的程序,结合逻辑运算,关系运算和数学知识才能让蛇撞墙死。苹果位置的出现也同样需要进一步的搜索,通过更改食物的横纵坐标以及出现的概率来确定食物的位置。编写程序时,也发现书上的东西对于程序的某些部分来说,没有什么作用,显得太浅显,想要实现老师给出的一些要求,还需要实践,通过上机学习,自己摸索才能成功。一次次修改,一次次失败,就像贪吃蛇想方设法吃苹果会Game over,我们只有认真学好基础理论,并结合实践经验才会取得进步。
在这次学习过程中,我很感谢我的组员,虽然有时我们的意见出现分歧,但是通过大家的共同努力,我们收获了很多,一起讨论,一起研究怎样解决问题,对老师提出的要求个个击破,我们拧成一股绳共同应对问题,让我感受了团队的力量希望在以后的学习过程中,我们依然能够互相帮助,共同进步。
五 课程设计修改后的程序.加墙
for(i=200;i<=500;i+=10)/*画围墙*/
{
rectangle(i,200,i+10,209);/*指定位置1*/
} for(i=120;i<=200;i+=10)/*画围墙*/
{
rectangle(100,i,109,i+10);/*指定位置2*/
} 2.指定位置加苹果
if(food.yes==1)/*需要出现新食物*/
{
food.x=rand()60;
food.y=rand()%200+60;
while(food.x%10!=0)
food.x++;
while(food.y%10!=0)
food.y++;
food.yes=0;3.指定地方撞墙死
if(snake.x[0]>190&&snake.x[0]< 510&&snake.y[0]>=200&&
snake.y[0]<=215)
{
GameOver();/*本次游戏结束*/
snake.life=1;/*蛇死*/
} if(snake.x[0]>90&&snake.x[0]<110&&snake.y[0]>=110&&snake.y[0]<=215)
{
GameOver();/*本次游戏结束*/
snake.life=1;/*蛇死*/
}
}
第四篇:贪吃蛇C语言课程设计报告
贪吃蛇游戏程序设计报告
贪吃蛇游戏设计
姓名: 张力
学号: 1002032
3完成日期: 月 日1
贪吃蛇游戏程序设计报告
一、设计目的
贪吃蛇游戏程序功能的实现主要是建立在二维数组和图形界面的应用上,通过编写游戏程序能够熟悉掌握相关数组和图形函数的运用,提高编程水平,增加编程的兴趣
二、总体设计
主函数
↓
图形驱动Init 画界面DrawK 游戏具体过程GamePlay 图形结束Close
↓
游戏结束GameOver 输出成绩PrScore
三、详细设计(项目成员及分工、模块功能说明(如函数功能、入口及出口参数说明,函数调用关系描述等)
①主函数main():
定义使用的常数,全局变量及函数原型说明,并调用Init()函数初始化图形系统;然后调用DrawK()函数画界面,调用GamePlay()函数实现游戏的具体过程,游戏结束后调用Close()函数关闭图形系统结束程序。
②画界面函数DrawK():
主界面是一个密封的围墙,用两个循环语句分别在水平方向和垂直方向输出连续的宽度和高度均为10个单位的矩形小方块,设置成淡青色,背景颜色为黑色。
③游戏具体过程函数GamePlay():
算法过程:
a.设置初始值。为防止食物出现在一个位置上,要设置随机数发生器,真正产生随机数。初始时,蛇只有蛇头,设定一个开始方向;
b.循环执行,直到按Esc键退出; c.没有按键的情况下,循环执行。
如果没有食物,随机出现食物;食物的随机出现要确保它的位置在10的倍数位置上,因为蛇的坐标都是以10为模的;如果有食物,则显示食物,蛇
贪吃蛇游戏程序设计报告
移动身体,根据蛇的方向改变坐标值,并判断蛇是否撞到了墙或自己吃到了自己,如果出现这两种情况之一,则蛇死;调用游戏结束函数GamePlay(),结束本次游戏;
判断蛇吃到食物的方法是蛇头的坐标和食物的坐标都相等;如果蛇吃到了食物,蛇身体长一节,数组元素增加一个,身体节数、分数都进行相应的改变。
在新位置画出蛇。采用的方法是每次移动的时候从最后一节开始到倒数第二节,将前一节的坐标赋值给后一节的坐标,移动后只要把最后一节用背景色去除即可。
D.如果有按键,则识别按键值。如果按键为Esc键则结束游戏,程序运行结束;如果所按键为方向键,则根据该键改变蛇方向的变量direction的值,相反方向键无效。
④游戏结束函数GameOver():
游戏结束,清除屏幕,调用输出分数函数PrScore(),并显示游戏结束。
⑤输出分数函数PrScore():
在指定位置利用sprintf()将整数转换为字符串,用outtextxy()输出,、bar()函数的应用是为了覆盖原来的值。
⑥图形结束函数Close():
在显示游戏结束信息的画面时,按任意键关闭图形系统,程序结束。
四、调试与测试:调试方法,测试结果的分析与讨论,测试过程中遇到的主要问题和采取的解决措施等;
将源文件在TC3.0环境下调试运行,前期发现错误为游戏界面静止。
五、源程序清单及执行结果:
#include
贪吃蛇游戏程序设计报告
#define UP 0x4800 #define Esc 0x011b #define N 200 /*定义全局变量*/ int i,key;int score=0;/*得分*/ int gamespeed=50000;/*游戏速度可以自己调整*/ struct Food { int x;/*定义食物的横坐标*/ int y;/*定义食物的纵坐标*/ int yes;/*判断是否要出现食物的变量*/ }food;/*食物的结构体*/ struct snake { int x[N];int y[N];int node;/*蛇的节数*/ int direction;/*蛇的移动方向*/ int life;/*蛇的生命,0活着,1死亡*/ }snake;
void Init(void);/*图形驱动*/ void Close(void);/*图形结束*/ void DrawK(void);/*开始画面*/ void GameOver(void);/*结束游戏*/ void GamePlay(void);/*玩游戏的具体过程*/ void PrScore(void);/*输出成绩*/
/*图形驱动*/ void Init(void){ int gdriver=DETECT,gmode;
initgraph(&gdriver,&gmode,“D:TC30LIB”);}
/*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/ void DrawK(void){ setbkcolor(LIGHTGREEN);setcolor(11);setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/ for(i=50;i<=600;i+=10)/*画围墙*/ {
贪吃蛇游戏程序设计报告
rectangle(i,40,i+10,49);/*上边*/
rectangle(i,451,i+10,460);/*下边*/ } for(i=40;i<=450;i+=10){
rectangle(50,i,59,i+10);/*左边*/
rectangle(601,i,610,i+10);/*右边*/ } }
/*玩游戏的具体过程*/ void GamePlay(void){ randomize();/*随机数发生器*/ food.yes=1;/*1表示需要出现新食物,0表示已经存在食物*/ snake.life=0;/*蛇还活着^ ^*/ snake.direction=1;/*方向向右*/ snake.x[0]=100;snake.y[0]=100;/*蛇头*/ snake.x[1]=110;snake.y[1]=100;snake.node=2;/*蛇的节数为2*/ PrScore();/*输出得分*/ while(1)/*可以重复玩游戏,按Esc键结束*/ {
While(!kbhit())/*在没有按键的情况下,蛇自己移动身体*/
{
if(food.yes==1)/*需要出现新食物*/
{
food.x=rand()%400+60;
food.y=rand()%350+60;
while(food.x%10!=0)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/
food.x++;
while(food.y%10!=0)
food.y++;
food.yes=0;/*画面上有食物了*/
}
if(food.yes==0)/*画面上有食物了就要把它显示出来*/
{
setcolor(GREEN);
rectangle(food.x,food.y,food.x+10,food.y-10);
}
for(i=snake.node-1;i>0;i--)/*蛇一个节一个节地往前移*/
{
snake.x[i]=snake.x[i-1];
贪吃蛇游戏程序设计报告
snake.y[i]=snake.y[i-1];
}
/*1,2,3,4表示右左上下四个方向,通过判断这个来移动蛇头*/
switch(snake.direction)
{
case 1:snake.x[0]+=10;break;
case 2:snake.x[0]-=10;break;
case 3:snake.y[0]-=10;break;
case 4:snake.y[0]+=10;break;
}
/*从蛇的第四节开始判断蛇有没有自己把自己吃掉*/
for(i=3;i { if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0]) { GameOver();/*显示游戏结束*/ snake.life=1;/*蛇死了T T!*/ break; } } If(snake.x[0]<55||snake.x[0]>595||snake.y[0]<55||snake.y[0]>455)/*判断蛇是否撞到墙*/ { GameOver();/*游戏结束*/ snake.life=1;/*蛇死了T T!*/ } if(snake.life==1)/*如果蛇死了就跳出内循环,重新开始*/ break; if(snake.x[0]==food.x&&snake.y[0]==food.y)/*吃掉食物啦!*/ { setcolor(0);/*把画面上的食物颜色覆盖掉*/ rectangle(food.x,food.y,food.x+10,food.y-10); snake.x[snake.node]=-20; snake.y[snake.node]=-20; /*新的一节先放在看不见的位置,下次循环就取前一节的位置*/ snake.node++;/*蛇的身体长一节*/ food.yes=1;/*画面上需要出现新的食物*/ score+=10;/*加十分!*/ PrScore();/*输出新得分*/ } setcolor(4);/*画出蛇*/ for(i=0;i 贪吃蛇游戏程序设计报告 rectangle(snake.x[i],snake.y[i],snake.x[i]+10,snake.y[i]-10); delay(gamespeed); setcolor(0);/*用黑色去除蛇的最后一节*/ rectangle(snake.x[snake.node-1],snake.y[snake.node-1],snake.x[snake.node-1]+10,snake.y[snake.node-1]-10);}/*endwhile(!kbhit)*/ if(snake.life==1)/*如果蛇死了就跳出循环*/ break;key=bioskey(0);/*接收按键*/ if(key==Esc)/*按Esc键退出*/ break;else if(key==UP&&snake.direction!=4)/*判断是否往相反方向移动*/ snake.direction=3;else if(key==RIGHT&&snake.direction!=2) snake.direction=1;else if(key==LEFT&&snake.direction!=1) snake.direction=2;else if(key==DOWN&&snake.direction!=3) snake.direction=4;}/*endwhile(1)*/ /*游戏结束*/ void GameOver(void){ cleardevice();/*清除屏幕*/ PrScore();/*输出得分*/ setcolor(RED);settextstyle(0, 0,4);outtextxy(200,200,“GAME OVER”);/*显示游戏结束*/ getch();} void PrScore(void)/*输出成绩*/ { char str[10];setfillstyle(SOLID_FILL,YELLOW);bar(50,15,220,35);setcolor(6);settextstyle(0,0,2);sprintf(str,“score:%d”,score);outtextxy(55,20,str);} 贪吃蛇游戏程序设计报告 void Close(void)/*图形结束*/ { getch();closegraph();} void main(void)/*主函数*/ { Init();DrawK();GamePlay();Close();} 8 :课程设计报告书 面向对象方法学 课 程 设 计 报 告 设计题目:学生信息管理系统课程 班 级:13软件工程1班 学 号:20130*** 姓 名:何** 指导教师:庄**老师 设计时间:2014年12月 附件 4摘 要 本文描述的是基于Windows环境的学生信息管理系统,主要功能模块包括:学生信息的增删改查,学生课程的增删改查, 学生成绩的增删改查,用户的增删改查。所用体系构架Client/Server结构。主要工具Microsoft Visual Studio 2010 设计窗体, MYSQL建立数据库,实现学生信息管理的各个功能。运用语言C#与sql语法编程。 本篇报告介绍一个学生信息管理系统的从分析到设计最后到开发的全过程为,给出了学生信息管理系统的设计和技术实现的过程,特别在细节上分析功能和函数的实现思想。 关键词:面向对象,学生信息管理系统,Win7,MYSQL,VS2012,C/S This article describes the Windows environment based student information management system , the main function modules include: Additions and deletions to change search student information , additions and deletions to change search student curriculum , student achievement CRUD user CRUD.The system architecture Client / Server structure.The main tool for Microsoft Visual Studio 2012 design form , MYSQL database was established to achieve the various functions of the student information management.Sql syntax and use of C # programming language.This report describes a student information management system from analysis to design and finally to the whole process of development , the process gives the student information management system design and technology , in particular, to achieve ideological analysis functions and functions in detail.Keywords: object oriented, student information management system,Win7,MYSQL, VS2012, C/S 目录 摘 要..............................................................................................................................................2 绪 论..............................................................................................................................................4 1.1 设计目的...........................................................................................................................4 1.2 开发工具选择...................................................................................................................4 1.3 开发环境...........................................................................................................................4 1.4 本报告的主要内容...........................................................................................................4 需求分析...........................................................................................................................................5 2.1系统需求简介....................................................................................................................5 2.1.1系统目标................................................................................................................5 2.1.2功能需求分析........................................................................................................5 2.1.3性能需求分析........................................................................................................5 总体设计...........................................................................................................................................6 3.1设计概述............................................................................................................................6 3.2系统总体结构及功能模块划分........................................................................................6 3.2.1学生信息管理模块................................................................................................6 3.2.2学生课程管理模块................................................................................................7 3.2.3学生成绩管理模块................................................................................................7 3.2.4系统用户管理模块................................................................................................8 3.3系统数据库概念结构设计................................................................................................8 3.3.1系统E-R图............................................................................................................8 3.3.2系统数据库的设计................................................................................................9 3.4安全保密设计..................................................................................................................10 3.4.1用户登录安全性..................................................................................................10 详细设计.........................................................................................................................................11 4.1概述..................................................................................................................................11 4.2系统程序流程图..............................................................................................................11 4.3系统主要功能模块简介..................................................................................................12 4.3.1系统登录..............................................................................................................12 4.3.2学生信息管理模块..............................................................................................12 4.3.3学生课程管理模块..............................................................................................14 4.3.4学生成绩管理模块..............................................................................................16 4.3.5系统用户管理模块..............................................................................................18 4.3.6版权关于..............................................................................................................20 主要功能模块代码.........................................................................................................................21 5.1 登录界面代码设计..........................................................................................................21 5.2 主页面代码......................................................................................................................26 5.3 系统用户管理模块代码设计..........................................................................................38 5.4 课程信息管理模块代码设计..........................................................................................45 5.5成绩信息管理模块代码设计...........................................................................................52 总结................................................................................................................................................61 参考文献.........................................................................................................................................61 课程设计心得.................................................................................................................................62 3 绪 论 1.1 设计目的 本课程设计的目的是使学生能熟练掌握简单的简单Windows窗体应用程序的设计和ADO.net的应用,希望通过本次课程设计锻炼学生使用C#语言解决实际问题的能力。 1.2 开发工具选择 本系统后台数据库采用MYSQL 数据库,该数据库系统在安全性、准确性和运行速度方面有绝对的优势,并且处理数据量大,效率高;前台采用Microsoft 公司的Visual Studio 2012作为主要开发工具,可与MYSQL 数据库无缝链接。 1.3 开发环境 开发系统:Win7 系统开发平台:Microsoft Visual Studio 2012 系统开发语言:C# 数据库管理软件:MYSQL 1.4 本报告的主要内容 本报告详细的介绍了学生信息管理系统的开发过程,主要涉及到的工作如下:系统的需求分析、系统的总体设计、系统的概念设计、系统各模块的详细设计、系统运行与测试。 需求分析 2.1系统需求简介 2.1.1系统目标 (1)根据查询条件实现学生信息的查询 (2)学生选课信息查询、成绩信息和用户信息的查询 (3)学生信息、课程信息、成绩信息、用户信息的增加、删除、修改(4)对基本信息完成增加、删除、修改时,需注意表与表之间的关联 2.1.2功能需求分析 本系统的功能需求分析如下: (1)学生信息查询:可以根据学号进行查询.(2)学生信息管理:主要是用于学生信息添加、删除、修改;(3)学生成绩查询:可以根据学号进行查询.(4)学生成绩管理:主要是用于学生成绩添加、删除、修改;(5)课程信息查询:可根据菜单进行查询.(6)课程信息管理:主要是用于课程信息添加、删除、修改;(7)用户信息查询:可根据菜单进行查询.(8)用户信息管理:主要是用于用户信息添加、删除、修改; 2.1.3性能需求分析 (1)登录、用户界面需求:简洁、易懂、易用、友好的用户界面。(2)安全保密性需求:只有凭借用户名和密码登陆系统,只有管理员才能进行信息的管理,非管理员只能查看信息。 总体设计 3.1设计概述 根据需求把整个系统分化成不同的模块,每个模块完成一个特定的子功能。把这些模块结合起来组成一个整体。逐一实现各个功能; 3.2系统总体结构及功能模块划分 经过对系统的需求分析,学生信息管理系统主要划分为三个部分:学生信息查询,学生信息管理,学生成绩录入三个功能模块。如图3.2.0 系统的总体结构。 学生信息管理系统学生信息管理 学生课程管理学生成绩管理系统用户管理 图3.2.0 系统的总体结构 3.2.1学生信息管理模块 学生信息管理:主要是用于学生信息添加、删除、修改,如图3.2.1学生信息管理模块结构。 学生信息管理模块添加学生信息删除学生信息修改学生信息 图3.2.1 3.2.2学生课程管理模块 学生课程管理:主要是用于学生课程添加、删除、修改,如图3.2.2学生课程管理模块结构。 学生课程管理模块添加课程信息 删除课程信息修改课程信息 图3.2.2 3.2.3学生成绩管理模块 学生成绩管理:主要是用于学生成绩添加、删除、修改,如图3.2.3学生成绩管理模块结构。 学生成绩管理模块添加学生成绩 删除学生成绩修改学生成绩 图3.2.3 3.2.4系统用户管理模块 系统用户管理:主要是用于系统用户添加、删除、修改,如图3.2.4系统用户管理模块结构。 系统用户管理模块添加用户 删除用户修改用户 图3.2.4 3.3系统数据库概念结构设计 根据对数据项与数据结构的分析,设计出能够满足系统需求的各种实体,及它们之间的关系,为后面的逻辑结构设计打下基础。3.3.1系统E-R图 系统E-R图可以将各个实体之间的关系显示出来,将各个实体间的属性依赖表示明白。如图3.3.1系统E-R图结构。 姓名性别年龄院系考核籍贯用户表用户名成绩表学号学号课程ID课程名类型学分学生表选课课程表理论学时实验学时用户密码用户类型成绩课程名称 图3.3.1系统E-R图结构 3.3.2系统数据库的设计 综合以上分析,要实现上面的所有功能模块,主要设计表如下: 表3.3.2.1 用户表(user) 表3.3.2.2成绩表(grade) 表3.3.2.3课程表(course) 表3.3.2.4学生表(stu) 3.3.3数据库的连接配置 ①先在项目中引用MySQLDriverCS.dll ②类添加 using MySQLDriverCS;③MySQLConnection conn = new MySQLConnection(new MySQLConnectionString(“数据库名”, “Server帐号”, “密码”).AsString);3.4安全保密设计 3.4.1用户登录安全性 系统设计了登录界面,每个合法用户有用户名及一个密码,只有当用户输入正确的用户名及密码组合后才能够对学生信息进行操作。 详细设计 4.1概述 详细设计阶段的根本目标是确定应该怎样具体的实现所要求的系统,也就是说,经过这个阶段的设计工作,应该得出目标系统的精确描述,从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。 4.2系统程序流程图 程序流程图又称为程序框图,它是历史悠久使用最广泛的描述软件设计的方法。它可将整个程序的总体流程清楚明白的显示出来。如图4.2.1系统总流程图结构。 图4.2.1系统总体流程图 4.3系统主要功能模块简介 4.3.1系统登录 用户凭借用户名及密码登录,成功登录后可对学生信息进行操作。用户界面如图4.3.1 用户登录界面所示。 图4.3.1 用户登录界面 4.3.2学生信息管理模块 学生信息管理:通过程序主界面的添加学生信息按钮可添加学生信息(如图 4.3.2添加信息窗口)。学生信息进行详细信息管理(如图4.3.3 信息管理)包括删除信息(如图 4.3.4删除信息提示)和修改信息(如图4.3.5 修改信息窗口)。 图4.3.2添加信息窗口 图4.3.3 信息管理 图4.3.4删除信息提示 图4.3.5 修改信息窗口 4.3.3学生课程管理模块 学生课程管理:通过程序主界面的菜单-->系统-->课程管理 可添加课程信 14 息(如图 4.3.5信息管理)和 详细的课程管理(如图4.3.6 添加信息窗口)和(如图4.3.7 删除信息提示)和(如图4.3.8 修改信息窗口)。 图 4.3.5信息管理 4.3.6 添加信息窗口 图4.3.7 删除信息提示 图4.3.8 修改信息窗口 4.3.4学生成绩管理模块 学生信息管理:选择一行学生信息通过程序主界面的查看-->学生成绩按钮,查看该学生的成绩信息(如图 4.3.7查看信息窗口)。查看后还可以添加该学生的成绩(如图 4.3.8添加信息窗口)、删除该学生的成绩(如图 4.3.9删除提示窗口)和修改该学生的成绩(如图 4.3.10修改信息窗口) 图4.3.7成绩管理 4.3.8添加信息窗口 图 4.3.9删除提示窗口 17 图 4.3.10修改信息窗口 4.3.5系统用户管理模块 系统用户管理:通过程序主界面的菜单-->系统-->用户管理,查看该系统用户的信息(如图 4.3.11查看信息窗口)。查看后还可以添加该系统的用户(如图 4.3.12添加信息窗口)、删除该系统的用户(如图 4.3.13删除提示窗口)和修改该系统的用户(如图 4.3.14修改信息窗口) 4.3.11查看信息窗口 图 4.3.12添加信息窗口 图 4.3.13删除提示窗口 图 4.3.14修改信息窗口 4.3.6版权关于 版权关于:图4.3.15版权关于 图4.3.15版权关于 主要功能模块代码 5.1 登录界面代码设计 namespace SIMS_1 { public partial class Log : Form { String check = “abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890”;string check_4 = “"; Random r = new Random(); public Log(){ InitializeComponent(); for(int i = 0;i < 4;i++){ int n=r.Next(0,61);check_4 += ”“ + check[n];} l_check.Text = check_4; } private static String id, password, type;public static int Flag = 1; String flag = ”“; MySQLConnection con = new MySQLConnection(new MySQLConnectionString(”students“, ”root“, ”123456“).AsString); private void bt_log_Click(object sender, EventArgs e){ try { id = txt_id.Text.Trim();password = txt_password.Text.Trim();if(this.rb_log_Manager.Checked){ type = ”管理员“;} if(this.rb_Log_Not_Manager.Checked){ type = ”非管理员“;} // 如果输入的帐号和密码与系统的帐号密码一致就进入本系统 con.Open();MySQLCommand setformat = new MySQLCommand(”set names gb2312“, con);setformat.ExecuteNonQuery();setformat.Dispose(); string sql = ”select * from user where 用户名='“ + id + ”' and 用户密码='“ + password + ”'and 用户类型='“ + type + ”'“; MySQLDataAdapter adapter = new MySQLDataAdapter(sql, con);DataSet set = new DataSet();adapter.Fill(set,”user“); this.dataView.DataSource = set.Tables[”user“];int rowcount = dataView.RowCount1;if(rowcount == 0){ MessageBox.Show(”您还未添加课程!“);} con.Close(); } public static String name1 = ”“;public static String id1 = ”“;private void bt_grade_Click(object sender, EventArgs e){ try { id1 = dataView.SelectedRows[0].Cells[0].Value.ToString();name1 = dataView.SelectedRows[0].Cells[1].Value.ToString(); Grade g = new Grade();g.Show();g.Text = name1 + ”:的成绩单“; con.Open(); MySQLCommand setformat = new MySQLCommand(”set names gb2312“, con);setformat.ExecuteNonQuery();setformat.Dispose();string sql1 = ”select * from grade where 学号=“+id1;MySQLDataAdapter adapter = new MySQLDataAdapter(sql1, con);DataSet set = new DataSet();adapter.Fill(set, ”grade“);g.dataView1.DataSource = set.Tables[0];int rowcount = g.dataView1.RowCount1;if(rowcount == 1) { MessageBox.Show(”该学号的学生已存在!“);} else { { } { { } { flag_exception = 1;} { } { + sex + ”',“ + if(id.Equals(”“))MessageBox.Show(”请输入学号!“);else try Int64 id1 = Convert.ToInt64(id);catch(FormatException)if(flag_exception == 1)MessageBox.Show(”请输入正确的学生学号!“);else String sql1 = ”insert into stu values('“ + id + ”','“ + name + ”','“"'” + age + “','” + depart + “','” + nation + “')”; MySQLCommand command = new MySQLCommand(sql1, Students.con);command.ExecuteNonQuery();Students.con.Close(); MessageBox.Show(“操作成功!”);this.Dispose();} } } } private void bt_Add_cancel_Click(object sender, EventArgs e){ this.Dispose();} } } 5.3 系统用户管理模块代码设计 namespace SIMS_1 { public partial class registered : Form { public registered(){ InitializeComponent();if(Log.Flag == 0){ 38 bt_registered_add.Hide();bt_registered_delete.Hide();bt_registered_change.Hide();} } private void bt_registered_refresh_Click(object sender, EventArgs e){ Students.con.Open();MySQLCommand setformat = new MySQLCommand(“set names gb2312”, Students.con);setformat.ExecuteNonQuery();setformat.Dispose();string sql1 = “select * from user”;MySQLDataAdapter adapter = new MySQLDataAdapter(sql1, Students.con);DataSet set = new DataSet();adapter.Fill(set, “user”);this.dataView_user.DataSource = set.Tables[0];} private void bt_registered_add_Click(object sender, EventArgs e){ registered_add registered_add = new registered_add();registered_add.Show();} private void bt_registered_delete_Click(object sender, EventArgs e){ try { String id = this.dataView_user.SelectedRows[0].Cells[0].Value.ToString(); if(MessageBox.Show(“是否要删除用户名为:” + id + “ 的用户?”, “确认”, MessageBoxButtons.YesNo, MessageBoxIcon.Question)== DialogResult.Yes){ Students.con.Open();MySQLCommand setformat = new MySQLCommand(“set names gb2312”, Students.con);setformat.ExecuteNonQuery();setformat.Dispose();String sql = “delete from user where 用户名='” + id + “'”;MySQLCommand command = new MySQLCommand(sql, Students.con);command.ExecuteNonQuery();Students.con.Close();MessageBox.Show(“删除成功!”, “提示!”, MessageBoxButtons.OK);} } catch(ArgumentOutOfRangeException){ MessageBox.Show(“您还没有选择一行要删除的数据!”);} catch(NullReferenceException){ MessageBox.Show(“您选择行的数据无效!”);} } private void bt_registered_change_Click(object sender, EventArgs e){ try { String user_name = this.dataView_user.SelectedRows[0].Cells[0].Value.ToString();String password = this.dataView_user.SelectedRows[0].Cells[1].Value.ToString();String type = this.dataView_user.SelectedRows[0].Cells[2].Value.ToString(); Students.con.Open();MySQLCommand setformat = new MySQLCommand(“set names gb2312”, Students.con);setformat.ExecuteNonQuery();setformat.Dispose();String sql = “delete from user where 用户名='” + user_name + “'”;MySQLCommand command = new MySQLCommand(sql, Students.con);command.ExecuteNonQuery();Students.con.Close(); registered_add r = new registered_add();r.Show(); r.txt_user_name.Text = user_name;r.txt_user_password.Text = password;if(type.Equals(“管理员”)){ r.rb_guanli.Checked = true;} else { r.rb_nomal.Checked = true;} r.Text = “修改”;r.bt_registered_add_cancle.Hide();} catch(ArgumentOutOfRangeException){ MessageBox.Show(“您还没选择一行要修改的数据!”);} catch(NullReferenceException){ MessageBox.Show(“您选择行的数据无效!”);} } } } 5.3.1添加系统用户模块代码设计 namespace SIMS_1 { public partial class registered_add : Form { public registered_add(){ InitializeComponent();} private void bt_registered_add_Ok_Click(object sender, EventArgs e){ int ExceptionFlag = 0;String user_name = txt_user_name.Text;String password = txt_user_password.Text;String type = rb_guanli.Checked ? “管理员” : “非管理员”;Int64 no=0; Students.con.Open();MySQLCommand setformat = new MySQLCommand(“set names gb2312”, Students.con);setformat.ExecuteNonQuery();setformat.Dispose(); String sql = “select * from user where 用户名='” + user_name + “'”;MySQLDataAdapter adapter = new MySQLDataAdapter(sql, Students.con);DataSet set = new DataSet();adapter.Fill(set);this.dataGridView1.DataSource = set.Tables[0]; int rowcount = dataGridView1.RowCount1;MessageBox.Show(“查找到” + rowcount + “个课程的信息!”);if(rowcount == 0){ MessageBox.Show(“您还未添加课程!”);} Students.con.Close();} } } 5.4.1添加课程信息模块代码设计 namespace SIMS_1 { public partial class Course_Add : Form { public Course_Add(){ InitializeComponent();} private void bt_course_add_Ok_Click(object sender, EventArgs e){ int flag_exception = 0;String id = this.txt_course_id.Text;String name = this.txt_course_name.Text;String type = this.rbt_Obligatory.Checked ? “必修” : “选修”;decimal credit = this.num_Credit.Value;decimal theory= this.num_Theory.Value;decimal experiment = this.num_Experiment.Value; Students.con.Open();MySQLCommand setformat = new MySQLCommand(“set names gb2312”, Students.con);setformat.ExecuteNonQuery();setformat.Dispose();String sql = “select * from course where 课程ID='” + id + “'”;MySQLDataAdapter adapter = new MySQLDataAdapter(sql, Students.con);DataSet set = new DataSet();adapter.Fill(set);this.dataView1.DataSource = set.Tables[0];int rowcount = dataView1.RowCount-1;if(rowcount == 1){ MessageBox.Show(“该课程ID已存在!”);}第五篇:C#课程设计报告书