第一篇:貪吃蛇課程設(shè)計(jì)總結(jié)報(bào)告書(shū)
貪吃蛇課程設(shè)計(jì)總結(jié)報(bào)告書(shū)
110200第7組
組員:李軼萌 劉浩 趙鵬
一.需求分析
(1)功能與數(shù)據(jù)需求:題目要求的功能(基本功能)與 擴(kuò)展功能 基本功能:貪吃蛇的蛇的移動(dòng)(上下左右)
隨機(jī)出現(xiàn)食物
蛇吃過(guò)后變長(zhǎng) 記分功能
撞到自己或邊界就失敗等基礎(chǔ)的功能
擴(kuò)展功能:難易度的選擇 背景音樂(lè) 空格暫停功能
容錯(cuò)功能(是否重新開(kāi)始/結(jié)束游戲)
(2)開(kāi)發(fā)環(huán)境
Vc6.0
二.概要設(shè)計(jì)(1)主要數(shù)據(jù)結(jié)構(gòu)(2)程序總體結(jié)構(gòu)(3)各模塊函數(shù)說(shuō)明 三 詳細(xì)設(shè)計(jì)(1)主函數(shù)部分(2)游戲部分
(3)判斷分?jǐn)?shù),是否繼續(xù)部分 四.測(cè)試
圖
五.應(yīng)用程序功能的詳細(xì)說(shuō)明 規(guī)則:貪吃蛇在不首尾相碰且不碰邊界的情況下,盡可能多的吃掉隨機(jī)出現(xiàn)的食物,多吃多得分而益智的小游戲。
操作:上w下s左a右d 暫停 空格 退出或重新游戲肯定y 否定 n 六.總結(jié)提高(1)課程設(shè)計(jì)總結(jié)
(2)開(kāi)發(fā)中遇到的問(wèn)題和解決方法
開(kāi)發(fā)之初,大家對(duì)這個(gè)程序都不是很了解,所以剛開(kāi)始只追求把文件做出來(lái),可以運(yùn)行就可以了。但是后來(lái)發(fā)現(xiàn)自己做出來(lái)的東西連自己都提不起興趣,單純只有基本功能功能,沒(méi)有記分功能,也沒(méi)有暫停等等,畫(huà)片也很糟糕,大小比例也有些失調(diào),被老師戲稱(chēng)為“貪吃螞蟻”。后來(lái)經(jīng)過(guò)調(diào)試和自主創(chuàng)新,我們發(fā)現(xiàn)我們其實(shí)還是可以加入一些人性化的東西的。
(3)對(duì)自己完成課設(shè)完成情況的評(píng)價(jià) 附錄:程序源代碼
第二篇:貪吃蛇java課程設(shè)計(jì)
import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Snake extends JFrame {
private JPanel contentPane;//窗體內(nèi)容網(wǎng)格
private JButton btnStart = new JButton(“開(kāi)始”);//游戲開(kāi)始按鈕
private JButton btnPause = new JButton(“暫停”);//游戲暫停按鈕
private JButton btnExit = new JButton(“退出”);//游戲退出按
private JPanel pnlTop = new JPanel();//頂部按鈕和分?jǐn)?shù)面板
private JPanel pnlLeft = new JPanel();//左側(cè)面板
private JPanel playPanel = new JPanel();//游戲區(qū)面板
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;//蛇運(yùn)動(dòng)方向
private static final int ROWS = 30;//游戲區(qū)行數(shù)
private static final int COLS = 50;//游戲區(qū)列數(shù)
private boolean isPause = false;//游戲暫停標(biāo)志
private boolean isEnd;//游戲結(jié)束標(biāo)志
private SnakeBody snake;//貪食蛇
private int score = 0;//當(dāng)前得分
SnakeThread thread = new SnakeThread();//游戲主線程
private GridLayout grid1 = new GridLayout(ROWS,COLS,0,0);//游戲區(qū)布局
private JButton[][] blocks;//游戲區(qū)的所有方塊
JPanel jPanel2 = new JPanel();
JLabel jLabel1 = new JLabel(“得分:”);
JLabel lblScroe = new JLabel(“0”);
ButtonGroup buttonGroup1 = new ButtonGroup();
JRadioButton rbtnLow = new JRadioButton(“初級(jí)”, true);
JRadioButton rbtnMid = new JRadioButton(“中級(jí)”);
JRadioButton rbtnHigh = new JRadioButton(“高級(jí)”);
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);
//創(chuàng)建并初始化游戲區(qū)方塊
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();//創(chuàng)建蛇身
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(“暫停”);
//初始化游戲區(qū)
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);
}
}
//在游戲區(qū)內(nèi)隨機(jī)放置豆
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];
}
//根據(jù)蛇身運(yùn)動(dòng)方向,決定蛇頭位置
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;
}
}
//當(dāng)蛇頭碰到墻時(shí),蛇頭碰到蛇身時(shí),游戲結(jié)束
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, “游戲結(jié)束!”);
}
//吃豆
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, “恭喜你過(guò)關(guān)了,準(zhǔn)備進(jìn)入下一關(guān)”);
speed-= 100;
if(speed == 200)
rbtnMid.setSelected(true);
if(speed == 100)
rbtnHigh.setSelected(true);
}
}
//吃豆后,蛇身加長(zhǎng),并隨機(jī)顯示下一個(gè)豆
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);//控制移動(dòng)速度
if(!isEnd &&!isPause){
snake.move();//移動(dòng)蛇身
}
if(isEnd){ //游戲結(jié)束
btnStart.setEnabled(true);
}
}
catch(Exception ex){}
}
}
}
class keyAction extends KeyAdapter {
public void keyPressed(KeyEvent e){
if(!isEnd &&!isPause){
//根據(jù)用戶(hù)按鍵,設(shè)置蛇運(yùn)動(dòng)方向
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;
}
}
}
}
//按鈕監(jiān)聽(tīng)響應(yīng)處理類(lèi)
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(“繼續(xù)”);
}
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語(yǔ)言程序貪吃蛇課程設(shè)計(jì)報(bào)告
高級(jí)語(yǔ)言程序設(shè)計(jì) 課程設(shè)計(jì)報(bào)告
Experiment Designing reporter 課程名稱(chēng):高級(jí)語(yǔ)言程序設(shè)計(jì)
英文名稱(chēng)
: C Program Experiment Designing 專(zhuān)業(yè):自動(dòng)化 111 學(xué)號(hào): XXX 姓名: XXX 指導(dǎo)教師: XXX
日期:
2012 年 6月 17日至 2011 年6 月 20 日 山東工商學(xué)院信電學(xué)院 一:課程設(shè)計(jì)內(nèi)容 程序功能介紹
貪吃蛇游戲是一個(gè)經(jīng)典小游戲,深受眾多玩家喜愛(ài),其規(guī)則是:一條蛇在封閉圍墻里,圍墻里隨機(jī)出現(xiàn)一個(gè)食物,通過(guò)按鍵盤(pán)四個(gè)光標(biāo)鍵控制蛇向上下左右四個(gè)方向移動(dòng),蛇頭撞倒食物,則食物被吃掉,蛇身體長(zhǎng)一節(jié),同時(shí)記10分,接著又出現(xiàn)食物,等待蛇來(lái)吃,如果蛇在移動(dòng)中撞到墻或身體交叉蛇頭撞倒自己身體游戲結(jié)束。此游戲不僅能鍛煉人的思維敏捷性,而且還可以提高玩家的邏輯判斷能力。設(shè)計(jì)思路
我們小組稱(chēng)設(shè)計(jì)本次課題——貪吃蛇的思路為“貪快速上手貪吃蛇三步曲”: 第一步:
尋找到一個(gè)真正可以運(yùn)行的已用C編好的貪吃蛇。因?yàn)槲覀儺吘箯奈纯吹竭^(guò)用C編游戲的程序,讓我們兩手一抹黑的開(kāi)始編寫(xiě)是有一定的困難的,如果我們自己找一個(gè)已經(jīng)設(shè)計(jì)好的程序,以此為跳板實(shí)現(xiàn)我們想要達(dá)到的效果,那么肯定是高效的。所以我們組統(tǒng)一決定,去尋找一個(gè)可以運(yùn)行的C編譯的貪吃蛇。第二步:
運(yùn)行游戲并了解游戲程序。
我們認(rèn)為,只有你運(yùn)行并了解一個(gè)游戲,才能知道游戲里需要什么樣的改進(jìn)和創(chuàng)新,如果你自己本身就沒(méi)玩過(guò)這個(gè)游戲,那么你就是再有技術(shù),你也永遠(yuǎn)改進(jìn)和改編不了一個(gè)游戲,因?yàn)槟愀静恢滥阍诟墒裁础?/p>
同樣重要的是了解游戲程序。因?yàn)橹挥锌炊顺绦颍拍軐?shí)現(xiàn)對(duì)他的改編,才能游刃有余。第三步:
尋找模塊并分類(lèi),而后進(jìn)行改編。
尋找到你想要改變的游戲內(nèi)容的控制模塊,比如,我想要增加一堵墻,那么就應(yīng)該找到 void DrawK(void){
setcolor(11);
setlinestyle(SOLID_LINE,0,THICK_WIDTH);for(i=200;i<=500;i+=10)
rectangle(i,200,i+10,209);} 然后要找到:改變蛇初始長(zhǎng)度、顏色、初始位置的模塊,改變蘋(píng)果出現(xiàn)位置的模塊,讓蛇見(jiàn)墻死的模塊,讓蛇吃蘋(píng)果加長(zhǎng)的模塊???.并且進(jìn)行分類(lèi),這樣下次再想實(shí)現(xiàn)某個(gè)目標(biāo)時(shí),可以一目了然的進(jìn)行改編。對(duì)于找到的模塊如何進(jìn)行改編呢?怎么才能知道某個(gè)數(shù)值或函數(shù)代表什么呢? 我們有兩個(gè)方法:
1.)看名字,比如snakecolor(),很明顯他的意思是蛇的顏色。2.)控制變量猜想,比如設(shè)置墻的時(shí)候for(i=200;i<=500;i+=10);
rectangle(i,300,i+10,309);中的200,500,300,209 代表什么呢?我們可以猜想:它很像是坐標(biāo)上的(x,y)的格式,是不是呢?可可以先讓其他數(shù)值不變,只讓309改變,改變后發(fā)現(xiàn)上面的墻變粗了,由此可見(jiàn)這個(gè)數(shù)字控制的是一堵墻的最下面一行的坐標(biāo)。
關(guān)于該程序的相關(guān)分析思路答題模板:
1.貪吃蛇程序流程圖如下:
二.貪吃蛇程序的改編:
經(jīng)過(guò)小組成員的認(rèn)真研究我們對(duì)其進(jìn)行了如下改編 第一步加墻 void DrawK(void){ /*setbkcolor(MAGENTA);*/
setcolor(5);//
可以改變顏色
setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*設(shè)置線型*/ 橫向上的墻:
for(i=100;i<=600;i+=10)// 本行代表行坐標(biāo)上:100代表墻的初始位置,i<=600代表墻的結(jié)尾。
{
rectangle(i,60,i+10,69);//本行代表縱坐標(biāo)上:60代表墻的最上面一行的位置,69代表墻最下面一行的位置。69-60=9,9代表墻塊的厚度 } 縱向上的墻:
for(i=100;i<=400;i+=10)//本行代表縱坐標(biāo)上:100代表墻的初始位置,i<=400代表墻的結(jié)尾
{
rectangle(100,i,109,i+10);//本行代表縱坐標(biāo)上:100代表墻的最左邊面一行的位置,69代表墻最右面一行的位置。69-60=9,9代表墻塊的寬度
} 我們認(rèn)為本模塊最重要的是for語(yǔ)句控制的坐標(biāo)代表的意思。只要明白了坐標(biāo)的意思,就可以實(shí)現(xiàn)對(duì)游戲的改編。
第二步就是進(jìn)行對(duì)新加入的墻蛇是否撞上死亡
讓蛇撞墻死
if(snake.x[0]>190&&snake.x[0]< 510&&snake.y[0]>=200&&
snake.y[0]<=215)
/*其中,對(duì)x,y范圍的控制,實(shí)際是對(duì)蛇撞擊的死亡區(qū)域的限制。*/
{
GameOver();/*本次游戲結(jié)束*/
snake.life=1;/*蛇死*/
} 相應(yīng)的新添加的墻。
for(i=200;i<=500;i+=10)/*畫(huà)圍墻*/
{
rectangle(i,200,i+10,209);/*指定位置*/ 第三步食物的定點(diǎn)出現(xiàn)
if(food.yes==1)/*需要出現(xiàn)新食物*/ 這里說(shuō)明一下:rand()產(chǎn)生0-65535的數(shù),在limits.h里有定義%400后產(chǎn)生一個(gè)0-399的數(shù)+60 則為 60 –459,即:%400+60意思是在60~399之間隨機(jī)產(chǎn)生一個(gè)數(shù)。
{
food.x=rand()%400+60;
food.y=rand()%350+60;
while(food.x%10!=0)/*食物隨機(jī)出現(xiàn)后必須讓食物能夠在整格內(nèi),這樣才可以讓蛇吃到*/
food.x++;
while(food.y%10!=0)
food.y++;
food.yes=0;/*畫(huà)面上有食物了*/
} 如果將food.x=(常數(shù)a)那么食物就會(huì)出現(xiàn)在x=a行的隨機(jī)列,對(duì)于food.y=(常數(shù)b)那么食物就出現(xiàn)在y=b列的隨機(jī)行。
第四步對(duì)食物墻壁的顏色以及對(duì)蛇的運(yùn)動(dòng)速個(gè)性化調(diào)節(jié)
setcolor(4);// 對(duì)顏色的調(diào)整 int gamespeed=50000;/*游戲速度自己調(diào)整*/
通過(guò)改變變量的值,就可以個(gè)性化選擇自己喜歡的顏色,這將是一場(chǎng)別開(kāi)生面的游戲界面。* 紅色代表解析淺藍(lán)代表提示 三.課程設(shè)計(jì)總結(jié) 有言曰:“實(shí)踐出真知”,在這幾天的課程設(shè)計(jì)實(shí)踐中,我們組三人真正的體會(huì)到了這句話(huà)的真諦。
在經(jīng)歷了一學(xué)期的C語(yǔ)言學(xué)習(xí)后,我們從以往的“紙上談兵”直接過(guò)渡到“實(shí)際作戰(zhàn)”。我們實(shí)現(xiàn)了讓靜態(tài)的程序變成動(dòng)態(tài)的游戲效果,雖然我們只是改編了一下別人做好的程序,但我們同樣由此獲益匪淺,感觸頗深,當(dāng)然也發(fā)現(xiàn)了許多自己的不足。
首先,在我們剛剛進(jìn)行第一步“尋找程序”的時(shí)候,就被擱淺了,因?yàn)槲覀儼l(fā)現(xiàn),在網(wǎng)上能找到一個(gè)真正符合我們使用標(biāo)準(zhǔn)的程序很難,就是找到了幾個(gè)也沒(méi)有能運(yùn)行它們的程序。我們花費(fèi)了前兩天的時(shí)間來(lái)尋找能夠使用的程序和軟件,但最后還是一無(wú)所獲,正當(dāng)我們一籌莫展的時(shí)候,我們的導(dǎo)師——楊老師給我們帶來(lái)了曙光,使得我們?cè)诤诎抵姓业搅讼M墓饷鳎瑮罾蠋熃o我們傳來(lái)了一個(gè)上屆師哥做好的程序,并且把它的運(yùn)行軟件也給了我們,這對(duì)我們來(lái)說(shuō)無(wú)疑是雪中送炭,得到這個(gè)程序后,我們?nèi)齻€(gè)人看到了C語(yǔ)言運(yùn)行一個(gè)游戲的流程和方法,我們腦中也大概有了一個(gè)思路。我們?nèi)齻€(gè)人以此程序?yàn)樘澹苯娱_(kāi)始對(duì)程序模塊進(jìn)行挑選,因?yàn)槲覀円呀?jīng)浪費(fèi)了兩天,所以我們決定進(jìn)行分工作業(yè),分別去尋找:筑墻模塊,加蘋(píng)果模塊,撞墻死模塊。最后我們用了一下午時(shí)間完成了三大步中的前兩大步和第三步的第一部分,剩下的就是最重要而充滿(mǎn)挑戰(zhàn)的改編了,從以上的操作中,讓我們明白了找對(duì)一個(gè)平臺(tái)的重要性,這個(gè)平臺(tái)就是老師給我們的程序,就是我們的前進(jìn)方向。沒(méi)有了方向了的征程,一開(kāi)始就是個(gè)錯(cuò)誤。在我們尋找程序模塊的時(shí)候,我們對(duì)于程序中的很多東西都是模模糊糊的概念,比如struck是什么,比如for語(yǔ)句的使用,以及for語(yǔ)句的循環(huán)體是什么,當(dāng)然我們也發(fā)現(xiàn)了定義字符在長(zhǎng)的程序中的方便與重要性。還有就是我們發(fā)現(xiàn)程序在編寫(xiě)時(shí)的規(guī)范性很重要,比如同級(jí)別花括號(hào)的位置的對(duì)應(yīng),對(duì)應(yīng)好了,模塊就好找,對(duì)應(yīng)不好就很亂。還有定義函數(shù)及變量的時(shí)候,函數(shù)名字和變量名最好是見(jiàn)名知意,比如我們所看的程序中,gamespeed,snakecolour,food.....在最后的攻堅(jiān)階段,為了實(shí)現(xiàn)對(duì)程序的改編,我們使用控制變量猜想法是正確的選擇,比如設(shè)置墻的時(shí)候for(i=200;i<=500;i+=10);
rectangle(i,300,i+10,309);中的200,500,300,209 代表什么呢?我們猜想:它很像是坐標(biāo)上的(x,y)的格式,是不是呢?我們先讓其他數(shù)值不變,只讓309改變,改變后發(fā)現(xiàn)上面的墻變粗了,由此我們知道這個(gè)數(shù)字控制的是一堵墻的最下面一行的坐標(biāo)。我們用這個(gè)方法知道了其他很多數(shù)值的用途。我們用這種方法先是知道了如何設(shè)置一堵墻,在我們欣喜設(shè)置一堵墻以后才發(fā)現(xiàn):蛇撞了墻后不死。在我們進(jìn)行了全局來(lái)看以后才知道,原來(lái)設(shè)計(jì)一堵墻,都要再設(shè)計(jì)一個(gè)if語(yǔ)句來(lái)使得蛇在這個(gè)范圍內(nèi)會(huì)死亡。并且我們發(fā)現(xiàn)在設(shè)計(jì)這個(gè)if語(yǔ)句的時(shí)候,不僅要計(jì)算好墻的坐標(biāo),而且還要用好邏輯語(yǔ)言(&&,||!)同時(shí)語(yǔ)句的運(yùn)算順序也很重要。剛一開(kāi)始我們忽略的&&和關(guān)系運(yùn)算符級(jí)別的高低,使得我們?cè)O(shè)計(jì)的墻,總是撞不死蛇,為此我們很是惱火,著急的組員還在這里發(fā)生了點(diǎn)小摩擦,由此可見(jiàn)C語(yǔ)言的嚴(yán)謹(jǐn)性!
最后我們又通過(guò)在網(wǎng)上查找信息,知道了隨機(jī)數(shù)發(fā)生器randomize()的用法:rand()=x%+d 意思是說(shuō)在d~(x-1)之間隨機(jī)產(chǎn)生一個(gè)數(shù)字。我們很自然的聯(lián)想到,如果把food.x等于常數(shù)a;把food.y等于一個(gè);x%+d的隨機(jī)數(shù),那不就能固定只在某一行出現(xiàn)蘋(píng)果了嗎?所以我們覺(jué)得,充分利用手邊的資源也是很重要的,畢竟C語(yǔ)言很高深,課本上的東西總是有限的,要想知道更多的東西還需多練習(xí),多查閱資料。總之:革命尚未成功,通知還需努力啊!四個(gè)人感受: 湯X:
就我個(gè)人而言,這次課程設(shè)計(jì),我覺(jué)得我最大的收獲就是:我明白了,我們其實(shí)真的沒(méi)那么厲害,我們真的還有很多東西不會(huì),我們真的連課本上的基本東西都沒(méi)掌握,課本上的東西,真的也只是C語(yǔ)言這個(gè)大海中的一滴水而已。而在我本人還沒(méi)有掌握好課本的知識(shí)點(diǎn)的情況下,做起這個(gè)程序自然很費(fèi)事,一個(gè)簡(jiǎn)單的課本P293講到的struct結(jié)構(gòu)體,我一開(kāi)始竟然忘記它是什么意思,不知道它是什么,就更不用談怎么用它了。還有邏輯語(yǔ)言的使用。我想,現(xiàn)在肯定有很多同學(xué)還不知道邏輯運(yùn)算的優(yōu)先次序吧?這個(gè)問(wèn)題我本人在使用邏輯語(yǔ)言的時(shí)候也不太會(huì),還查看了書(shū)。像這些小的知識(shí)點(diǎn),我個(gè)人認(rèn)為如果掌握不好的話(huà),是不可能讓整個(gè)大程序運(yùn)行起來(lái)的。還有比如我在遇到程序顯示“else多余”的警告時(shí)候不不知所措,問(wèn)了老師才知道是if()后面加了“;”而且if沒(méi)有用“{}”來(lái)固定范圍,這個(gè)錯(cuò)誤原因是分號(hào)使得if語(yǔ)句結(jié)束了,孤立的else當(dāng)然是多余的了。一個(gè)小小的分號(hào)使得程序無(wú)法運(yùn)行,由此可見(jiàn)在今后的編程中,一定要注意謹(jǐn)慎,仔細(xì)。同時(shí)要注意記住平時(shí)編程的時(shí)候,出現(xiàn)的錯(cuò)誤指示是什么意思。比如這次的“else多余”就是因?yàn)閕f后多了分號(hào)。還有在編程時(shí)候,書(shū)寫(xiě)一定要規(guī)范,特別是if語(yǔ)句的花括號(hào)的位置要對(duì)應(yīng)起來(lái),因?yàn)槲恢脹Q定范圍。注意定義變量和函數(shù)要使用規(guī)范的英文單詞,這樣才能見(jiàn)名知意,為以后修改找變量節(jié)省時(shí)間。對(duì)于這次課題中,“設(shè)計(jì)一個(gè)墻,就要對(duì)應(yīng)一個(gè)函數(shù)舍得蛇撞墻死”,讓我明白,C語(yǔ)言程序中各部分的聯(lián)系性,牽一發(fā)而動(dòng)全身,所以在編程時(shí)一定要注意全局的把握。我們最后還要說(shuō)說(shuō)在編程中,好好利用網(wǎng)絡(luò)資源,因?yàn)檎n本里的東西總是有限的,而C語(yǔ)言又那么高深,像隨機(jī)數(shù)發(fā)生器,還有顏色的定都是我第一次接觸,這些東西的用處可是頗大,以后一定好好學(xué)習(xí)。多看,多練,多總結(jié)。最后還要感謝指導(dǎo)老師,楊老師對(duì)我學(xué)習(xí)的幫助和指導(dǎo)。徐XXX: 剛開(kāi)始拿到題目時(shí)候什么也不會(huì)一片茫然,從網(wǎng)上找了一個(gè)程序一看,太嚇人了,這么長(zhǎng)怎么看啊,而且還是錯(cuò)誤的。沒(méi)辦法只能硬著頭皮去改了,但是在改的過(guò)程中才發(fā)現(xiàn)其實(shí)c語(yǔ)言沒(méi)有想象的那么難而且還很有意思,只是自己平時(shí)沒(méi)有好好學(xué)所以在改的時(shí)候非常吃力,有很多簡(jiǎn)單的知識(shí)都不知道,沒(méi)有記住。沒(méi)辦法只能借助與課本了。但是幾天下來(lái)發(fā)現(xiàn)自己已經(jīng)不再像以前那樣是個(gè)菜鳥(niǎo)了,雖然很多知識(shí)還沒(méi)掌握。同時(shí)在編改程序的時(shí)候切記不能煩躁要靜心慢慢來(lái),好幾次自己都因心燥出現(xiàn)了很多不該出現(xiàn)的錯(cuò)誤浪費(fèi)了很多時(shí)間。
對(duì)鍵盤(pán)的熟悉在編程時(shí)也是很重要的,自己在寫(xiě)的時(shí)候往往就是跟一指禪差不多眼睛盯著鍵盤(pán)打,打錯(cuò)了也不知道最后導(dǎo)致整個(gè)程序都是錯(cuò)誤的,就因?yàn)橐粋€(gè)打錯(cuò)了一個(gè)字母。
總的來(lái)說(shuō)這次課程設(shè)計(jì)收獲很多,也知道了自己的不足,在以后的學(xué)習(xí)中要多實(shí)踐,實(shí)踐很能提高自己的能力。劉XX:
4天的C語(yǔ)言課程設(shè)計(jì)上機(jī)學(xué)習(xí)讓我感受頗多,每天都發(fā)現(xiàn)新的問(wèn)題,又不得不絞盡腦汁解決問(wèn)題,心情就像正弦函數(shù),隨著問(wèn)題的出現(xiàn)和解決一起一伏。剛開(kāi)始接觸貪吃蛇的C語(yǔ)言成尋時(shí),看著C-free上面出現(xiàn)的有十幾個(gè)錯(cuò)誤的程序,一片茫然不知所措。只能繼續(xù)在網(wǎng)上搜索錯(cuò)誤較少的程序,并結(jié)合書(shū)上的基礎(chǔ)知識(shí)查看錯(cuò)誤所在,最終發(fā)現(xiàn)是
作為小組中唯一的女生,明顯感覺(jué)有壓力,打字速度不如另外兩個(gè)男生,對(duì)游戲和程序的敏感也不如他們強(qiáng),有種小小的挫敗感。旁邊小組的同學(xué)也給我很大的壓力。他們自己編寫(xiě)程序,我很佩服他們,越是這樣想。心里越著急,越不能解決問(wèn)題,每當(dāng)感覺(jué)有壓力的時(shí)候,就提醒自己心靜,認(rèn)真的看程序。在學(xué)習(xí)過(guò)程中,深深的發(fā)現(xiàn)了自己的不足之處,對(duì)于C語(yǔ)言,只學(xué)了一點(diǎn)點(diǎn)皮毛東西,想要學(xué)好C語(yǔ)言,編好程序,還要付出很多的努力,還要用更多的時(shí)間來(lái)學(xué)習(xí)C語(yǔ)言這門(mén)深?yuàn)W的學(xué)科。現(xiàn)在只能借用別人已經(jīng)寫(xiě)好的程序,在別人的基礎(chǔ)上,一點(diǎn)點(diǎn)進(jìn)步和學(xué)習(xí),比如程序中筑墻,需要仿照已有的程序,結(jié)合邏輯運(yùn)算,關(guān)系運(yùn)算和數(shù)學(xué)知識(shí)才能讓蛇撞墻死。蘋(píng)果位置的出現(xiàn)也同樣需要進(jìn)一步的搜索,通過(guò)更改食物的橫縱坐標(biāo)以及出現(xiàn)的概率來(lái)確定食物的位置。編寫(xiě)程序時(shí),也發(fā)現(xiàn)書(shū)上的東西對(duì)于程序的某些部分來(lái)說(shuō),沒(méi)有什么作用,顯得太淺顯,想要實(shí)現(xiàn)老師給出的一些要求,還需要實(shí)踐,通過(guò)上機(jī)學(xué)習(xí),自己摸索才能成功。一次次修改,一次次失敗,就像貪吃蛇想方設(shè)法吃蘋(píng)果會(huì)Game over,我們只有認(rèn)真學(xué)好基礎(chǔ)理論,并結(jié)合實(shí)踐經(jīng)驗(yàn)才會(huì)取得進(jìn)步。
在這次學(xué)習(xí)過(guò)程中,我很感謝我的組員,雖然有時(shí)我們的意見(jiàn)出現(xiàn)分歧,但是通過(guò)大家的共同努力,我們收獲了很多,一起討論,一起研究怎樣解決問(wèn)題,對(duì)老師提出的要求個(gè)個(gè)擊破,我們擰成一股繩共同應(yīng)對(duì)問(wèn)題,讓我感受了團(tuán)隊(duì)的力量希望在以后的學(xué)習(xí)過(guò)程中,我們依然能夠互相幫助,共同進(jìn)步。
五 課程設(shè)計(jì)修改后的程序.加墻
for(i=200;i<=500;i+=10)/*畫(huà)圍墻*/
{
rectangle(i,200,i+10,209);/*指定位置1*/
} for(i=120;i<=200;i+=10)/*畫(huà)圍墻*/
{
rectangle(100,i,109,i+10);/*指定位置2*/
} 2.指定位置加蘋(píng)果
if(food.yes==1)/*需要出現(xiàn)新食物*/
{
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();/*本次游戲結(jié)束*/
snake.life=1;/*蛇死*/
} if(snake.x[0]>90&&snake.x[0]<110&&snake.y[0]>=110&&snake.y[0]<=215)
{
GameOver();/*本次游戲結(jié)束*/
snake.life=1;/*蛇死*/
}
}
第四篇:貪吃蛇C語(yǔ)言課程設(shè)計(jì)報(bào)告
貪吃蛇游戲程序設(shè)計(jì)報(bào)告
貪吃蛇游戲設(shè)計(jì)
姓名: 張力
學(xué)號(hào): 1002032
3完成日期: 月 日1
貪吃蛇游戲程序設(shè)計(jì)報(bào)告
一、設(shè)計(jì)目的
貪吃蛇游戲程序功能的實(shí)現(xiàn)主要是建立在二維數(shù)組和圖形界面的應(yīng)用上,通過(guò)編寫(xiě)游戲程序能夠熟悉掌握相關(guān)數(shù)組和圖形函數(shù)的運(yùn)用,提高編程水平,增加編程的興趣
二、總體設(shè)計(jì)
主函數(shù)
↓
圖形驅(qū)動(dòng)Init 畫(huà)界面DrawK 游戲具體過(guò)程GamePlay 圖形結(jié)束Close
↓
游戲結(jié)束GameOver 輸出成績(jī)PrScore
三、詳細(xì)設(shè)計(jì)(項(xiàng)目成員及分工、模塊功能說(shuō)明(如函數(shù)功能、入口及出口參數(shù)說(shuō)明,函數(shù)調(diào)用關(guān)系描述等)
①主函數(shù)main():
定義使用的常數(shù),全局變量及函數(shù)原型說(shuō)明,并調(diào)用Init()函數(shù)初始化圖形系統(tǒng);然后調(diào)用DrawK()函數(shù)畫(huà)界面,調(diào)用GamePlay()函數(shù)實(shí)現(xiàn)游戲的具體過(guò)程,游戲結(jié)束后調(diào)用Close()函數(shù)關(guān)閉圖形系統(tǒng)結(jié)束程序。
②畫(huà)界面函數(shù)DrawK():
主界面是一個(gè)密封的圍墻,用兩個(gè)循環(huán)語(yǔ)句分別在水平方向和垂直方向輸出連續(xù)的寬度和高度均為10個(gè)單位的矩形小方塊,設(shè)置成淡青色,背景顏色為黑色。
③游戲具體過(guò)程函數(shù)GamePlay():
算法過(guò)程:
a.設(shè)置初始值。為防止食物出現(xiàn)在一個(gè)位置上,要設(shè)置隨機(jī)數(shù)發(fā)生器,真正產(chǎn)生隨機(jī)數(shù)。初始時(shí),蛇只有蛇頭,設(shè)定一個(gè)開(kāi)始方向;
b.循環(huán)執(zhí)行,直到按Esc鍵退出; c.沒(méi)有按鍵的情況下,循環(huán)執(zhí)行。
如果沒(méi)有食物,隨機(jī)出現(xiàn)食物;食物的隨機(jī)出現(xiàn)要確保它的位置在10的倍數(shù)位置上,因?yàn)樯叩淖鴺?biāo)都是以10為模的;如果有食物,則顯示食物,蛇
貪吃蛇游戲程序設(shè)計(jì)報(bào)告
移動(dòng)身體,根據(jù)蛇的方向改變坐標(biāo)值,并判斷蛇是否撞到了墻或自己吃到了自己,如果出現(xiàn)這兩種情況之一,則蛇死;調(diào)用游戲結(jié)束函數(shù)GamePlay(),結(jié)束本次游戲;
判斷蛇吃到食物的方法是蛇頭的坐標(biāo)和食物的坐標(biāo)都相等;如果蛇吃到了食物,蛇身體長(zhǎng)一節(jié),數(shù)組元素增加一個(gè),身體節(jié)數(shù)、分?jǐn)?shù)都進(jìn)行相應(yīng)的改變。
在新位置畫(huà)出蛇。采用的方法是每次移動(dòng)的時(shí)候從最后一節(jié)開(kāi)始到倒數(shù)第二節(jié),將前一節(jié)的坐標(biāo)賦值給后一節(jié)的坐標(biāo),移動(dòng)后只要把最后一節(jié)用背景色去除即可。
D.如果有按鍵,則識(shí)別按鍵值。如果按鍵為Esc鍵則結(jié)束游戲,程序運(yùn)行結(jié)束;如果所按鍵為方向鍵,則根據(jù)該鍵改變蛇方向的變量direction的值,相反方向鍵無(wú)效。
④游戲結(jié)束函數(shù)GameOver():
游戲結(jié)束,清除屏幕,調(diào)用輸出分?jǐn)?shù)函數(shù)PrScore(),并顯示游戲結(jié)束。
⑤輸出分?jǐn)?shù)函數(shù)PrScore():
在指定位置利用sprintf()將整數(shù)轉(zhuǎn)換為字符串,用outtextxy()輸出,、bar()函數(shù)的應(yīng)用是為了覆蓋原來(lái)的值。
⑥圖形結(jié)束函數(shù)Close():
在顯示游戲結(jié)束信息的畫(huà)面時(shí),按任意鍵關(guān)閉圖形系統(tǒng),程序結(jié)束。
四、調(diào)試與測(cè)試:調(diào)試方法,測(cè)試結(jié)果的分析與討論,測(cè)試過(guò)程中遇到的主要問(wèn)題和采取的解決措施等;
將源文件在TC3.0環(huán)境下調(diào)試運(yùn)行,前期發(fā)現(xiàn)錯(cuò)誤為游戲界面靜止。
五、源程序清單及執(zhí)行結(jié)果:
#include
貪吃蛇游戲程序設(shè)計(jì)報(bào)告
#define UP 0x4800 #define Esc 0x011b #define N 200 /*定義全局變量*/ int i,key;int score=0;/*得分*/ int gamespeed=50000;/*游戲速度可以自己調(diào)整*/ struct Food { int x;/*定義食物的橫坐標(biāo)*/ int y;/*定義食物的縱坐標(biāo)*/ int yes;/*判斷是否要出現(xiàn)食物的變量*/ }food;/*食物的結(jié)構(gòu)體*/ struct snake { int x[N];int y[N];int node;/*蛇的節(jié)數(shù)*/ int direction;/*蛇的移動(dòng)方向*/ int life;/*蛇的生命,0活著,1死亡*/ }snake;
void Init(void);/*圖形驅(qū)動(dòng)*/ void Close(void);/*圖形結(jié)束*/ void DrawK(void);/*開(kāi)始畫(huà)面*/ void GameOver(void);/*結(jié)束游戲*/ void GamePlay(void);/*玩游戲的具體過(guò)程*/ void PrScore(void);/*輸出成績(jī)*/
/*圖形驅(qū)動(dòng)*/ void Init(void){ int gdriver=DETECT,gmode;
initgraph(&gdriver,&gmode,“D:TC30LIB”);}
/*開(kāi)始畫(huà)面,左上角坐標(biāo)為(50,40),右下角坐標(biāo)為(610,460)的圍墻*/ void DrawK(void){ setbkcolor(LIGHTGREEN);setcolor(11);setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*設(shè)置線型*/ for(i=50;i<=600;i+=10)/*畫(huà)圍墻*/ {
貪吃蛇游戲程序設(shè)計(jì)報(bào)告
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);/*右邊*/ } }
/*玩游戲的具體過(guò)程*/ void GamePlay(void){ randomize();/*隨機(jī)數(shù)發(fā)生器*/ food.yes=1;/*1表示需要出現(xiàn)新食物,0表示已經(jīng)存在食物*/ 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;/*蛇的節(jié)數(shù)為2*/ PrScore();/*輸出得分*/ while(1)/*可以重復(fù)玩游戲,按Esc鍵結(jié)束*/ {
While(!kbhit())/*在沒(méi)有按鍵的情況下,蛇自己移動(dòng)身體*/
{
if(food.yes==1)/*需要出現(xiàn)新食物*/
{
food.x=rand()%400+60;
food.y=rand()%350+60;
while(food.x%10!=0)/*食物隨機(jī)出現(xiàn)后必須讓食物能夠在整格內(nèi),這樣才可以讓蛇吃到*/
food.x++;
while(food.y%10!=0)
food.y++;
food.yes=0;/*畫(huà)面上有食物了*/
}
if(food.yes==0)/*畫(huà)面上有食物了就要把它顯示出來(lái)*/
{
setcolor(GREEN);
rectangle(food.x,food.y,food.x+10,food.y-10);
}
for(i=snake.node-1;i>0;i--)/*蛇一個(gè)節(jié)一個(gè)節(jié)地往前移*/
{
snake.x[i]=snake.x[i-1];
貪吃蛇游戲程序設(shè)計(jì)報(bào)告
snake.y[i]=snake.y[i-1];
}
/*1,2,3,4表示右左上下四個(gè)方向,通過(guò)判斷這個(gè)來(lái)移動(dòng)蛇頭*/
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;
}
/*從蛇的第四節(jié)開(kāi)始判斷蛇有沒(méi)有自己把自己吃掉*/
for(i=3;i { if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0]) { GameOver();/*顯示游戲結(jié)束*/ snake.life=1;/*蛇死了T T!*/ break; } } If(snake.x[0]<55||snake.x[0]>595||snake.y[0]<55||snake.y[0]>455)/*判斷蛇是否撞到墻*/ { GameOver();/*游戲結(jié)束*/ snake.life=1;/*蛇死了T T!*/ } if(snake.life==1)/*如果蛇死了就跳出內(nèi)循環(huán),重新開(kāi)始*/ break; if(snake.x[0]==food.x&&snake.y[0]==food.y)/*吃掉食物啦!*/ { setcolor(0);/*把畫(huà)面上的食物顏色覆蓋掉*/ rectangle(food.x,food.y,food.x+10,food.y-10); snake.x[snake.node]=-20; snake.y[snake.node]=-20; /*新的一節(jié)先放在看不見(jiàn)的位置,下次循環(huán)就取前一節(jié)的位置*/ snake.node++;/*蛇的身體長(zhǎng)一節(jié)*/ food.yes=1;/*畫(huà)面上需要出現(xiàn)新的食物*/ score+=10;/*加十分!*/ PrScore();/*輸出新得分*/ } setcolor(4);/*畫(huà)出蛇*/ for(i=0;i 貪吃蛇游戲程序設(shè)計(jì)報(bào)告 rectangle(snake.x[i],snake.y[i],snake.x[i]+10,snake.y[i]-10); delay(gamespeed); setcolor(0);/*用黑色去除蛇的最后一節(jié)*/ 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)/*如果蛇死了就跳出循環(huán)*/ break;key=bioskey(0);/*接收按鍵*/ if(key==Esc)/*按Esc鍵退出*/ break;else if(key==UP&&snake.direction!=4)/*判斷是否往相反方向移動(dòng)*/ 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)*/ /*游戲結(jié)束*/ void GameOver(void){ cleardevice();/*清除屏幕*/ PrScore();/*輸出得分*/ setcolor(RED);settextstyle(0, 0,4);outtextxy(200,200,“GAME OVER”);/*顯示游戲結(jié)束*/ getch();} void PrScore(void)/*輸出成績(jī)*/ { 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);} 貪吃蛇游戲程序設(shè)計(jì)報(bào)告 void Close(void)/*圖形結(jié)束*/ { getch();closegraph();} void main(void)/*主函數(shù)*/ { Init();DrawK();GamePlay();Close();} 8 :課程設(shè)計(jì)報(bào)告書(shū) 面向?qū)ο蠓椒▽W(xué) 課 程 設(shè) 計(jì) 報(bào) 告 設(shè)計(jì)題目:學(xué)生信息管理系統(tǒng)課程 班 級(jí):13軟件工程1班 學(xué) 號(hào):20130*** 姓 名:何** 指導(dǎo)教師:莊**老師 設(shè)計(jì)時(shí)間:2014年12月 附件 4摘 要 本文描述的是基于Windows環(huán)境的學(xué)生信息管理系統(tǒng),主要功能模塊包括:學(xué)生信息的增刪改查,學(xué)生課程的增刪改查, 學(xué)生成績(jī)的增刪改查,用戶(hù)的增刪改查。所用體系構(gòu)架Client/Server結(jié)構(gòu)。主要工具M(jìn)icrosoft Visual Studio 2010 設(shè)計(jì)窗體, MYSQL建立數(shù)據(jù)庫(kù),實(shí)現(xiàn)學(xué)生信息管理的各個(gè)功能。運(yùn)用語(yǔ)言C#與sql語(yǔ)法編程。 本篇報(bào)告介紹一個(gè)學(xué)生信息管理系統(tǒng)的從分析到設(shè)計(jì)最后到開(kāi)發(fā)的全過(guò)程為,給出了學(xué)生信息管理系統(tǒng)的設(shè)計(jì)和技術(shù)實(shí)現(xiàn)的過(guò)程,特別在細(xì)節(jié)上分析功能和函數(shù)的實(shí)現(xiàn)思想。 關(guān)鍵詞:面向?qū)ο螅瑢W(xué)生信息管理系統(tǒng),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 設(shè)計(jì)目的...........................................................................................................................4 1.2 開(kāi)發(fā)工具選擇...................................................................................................................4 1.3 開(kāi)發(fā)環(huán)境...........................................................................................................................4 1.4 本報(bào)告的主要內(nèi)容...........................................................................................................4 需求分析...........................................................................................................................................5 2.1系統(tǒng)需求簡(jiǎn)介....................................................................................................................5 2.1.1系統(tǒng)目標(biāo)................................................................................................................5 2.1.2功能需求分析........................................................................................................5 2.1.3性能需求分析........................................................................................................5 總體設(shè)計(jì)...........................................................................................................................................6 3.1設(shè)計(jì)概述............................................................................................................................6 3.2系統(tǒng)總體結(jié)構(gòu)及功能模塊劃分........................................................................................6 3.2.1學(xué)生信息管理模塊................................................................................................6 3.2.2學(xué)生課程管理模塊................................................................................................7 3.2.3學(xué)生成績(jī)管理模塊................................................................................................7 3.2.4系統(tǒng)用戶(hù)管理模塊................................................................................................8 3.3系統(tǒng)數(shù)據(jù)庫(kù)概念結(jié)構(gòu)設(shè)計(jì)................................................................................................8 3.3.1系統(tǒng)E-R圖............................................................................................................8 3.3.2系統(tǒng)數(shù)據(jù)庫(kù)的設(shè)計(jì)................................................................................................9 3.4安全保密設(shè)計(jì)..................................................................................................................10 3.4.1用戶(hù)登錄安全性..................................................................................................10 詳細(xì)設(shè)計(jì).........................................................................................................................................11 4.1概述..................................................................................................................................11 4.2系統(tǒng)程序流程圖..............................................................................................................11 4.3系統(tǒng)主要功能模塊簡(jiǎn)介..................................................................................................12 4.3.1系統(tǒng)登錄..............................................................................................................12 4.3.2學(xué)生信息管理模塊..............................................................................................12 4.3.3學(xué)生課程管理模塊..............................................................................................14 4.3.4學(xué)生成績(jī)管理模塊..............................................................................................16 4.3.5系統(tǒng)用戶(hù)管理模塊..............................................................................................18 4.3.6版權(quán)關(guān)于..............................................................................................................20 主要功能模塊代碼.........................................................................................................................21 5.1 登錄界面代碼設(shè)計(jì)..........................................................................................................21 5.2 主頁(yè)面代碼......................................................................................................................26 5.3 系統(tǒng)用戶(hù)管理模塊代碼設(shè)計(jì)..........................................................................................38 5.4 課程信息管理模塊代碼設(shè)計(jì)..........................................................................................45 5.5成績(jī)信息管理模塊代碼設(shè)計(jì)...........................................................................................52 總結(jié)................................................................................................................................................61 參考文獻(xiàn).........................................................................................................................................61 課程設(shè)計(jì)心得.................................................................................................................................62 3 緒 論 1.1 設(shè)計(jì)目的 本課程設(shè)計(jì)的目的是使學(xué)生能熟練掌握簡(jiǎn)單的簡(jiǎn)單Windows窗體應(yīng)用程序的設(shè)計(jì)和ADO.net的應(yīng)用,希望通過(guò)本次課程設(shè)計(jì)鍛煉學(xué)生使用C#語(yǔ)言解決實(shí)際問(wèn)題的能力。 1.2 開(kāi)發(fā)工具選擇 本系統(tǒng)后臺(tái)數(shù)據(jù)庫(kù)采用MYSQL 數(shù)據(jù)庫(kù),該數(shù)據(jù)庫(kù)系統(tǒng)在安全性、準(zhǔn)確性和運(yùn)行速度方面有絕對(duì)的優(yōu)勢(shì),并且處理數(shù)據(jù)量大,效率高;前臺(tái)采用Microsoft 公司的Visual Studio 2012作為主要開(kāi)發(fā)工具,可與MYSQL 數(shù)據(jù)庫(kù)無(wú)縫鏈接。 1.3 開(kāi)發(fā)環(huán)境 開(kāi)發(fā)系統(tǒng):Win7 系統(tǒng)開(kāi)發(fā)平臺(tái):Microsoft Visual Studio 2012 系統(tǒng)開(kāi)發(fā)語(yǔ)言:C# 數(shù)據(jù)庫(kù)管理軟件:MYSQL 1.4 本報(bào)告的主要內(nèi)容 本報(bào)告詳細(xì)的介紹了學(xué)生信息管理系統(tǒng)的開(kāi)發(fā)過(guò)程,主要涉及到的工作如下:系統(tǒng)的需求分析、系統(tǒng)的總體設(shè)計(jì)、系統(tǒng)的概念設(shè)計(jì)、系統(tǒng)各模塊的詳細(xì)設(shè)計(jì)、系統(tǒng)運(yùn)行與測(cè)試。 需求分析 2.1系統(tǒng)需求簡(jiǎn)介 2.1.1系統(tǒng)目標(biāo) (1)根據(jù)查詢(xún)條件實(shí)現(xiàn)學(xué)生信息的查詢(xún) (2)學(xué)生選課信息查詢(xún)、成績(jī)信息和用戶(hù)信息的查詢(xún) (3)學(xué)生信息、課程信息、成績(jī)信息、用戶(hù)信息的增加、刪除、修改(4)對(duì)基本信息完成增加、刪除、修改時(shí),需注意表與表之間的關(guān)聯(lián) 2.1.2功能需求分析 本系統(tǒng)的功能需求分析如下: (1)學(xué)生信息查詢(xún):可以根據(jù)學(xué)號(hào)進(jìn)行查詢(xún).(2)學(xué)生信息管理:主要是用于學(xué)生信息添加、刪除、修改;(3)學(xué)生成績(jī)查詢(xún):可以根據(jù)學(xué)號(hào)進(jìn)行查詢(xún).(4)學(xué)生成績(jī)管理:主要是用于學(xué)生成績(jī)添加、刪除、修改;(5)課程信息查詢(xún):可根據(jù)菜單進(jìn)行查詢(xún).(6)課程信息管理:主要是用于課程信息添加、刪除、修改;(7)用戶(hù)信息查詢(xún):可根據(jù)菜單進(jìn)行查詢(xún).(8)用戶(hù)信息管理:主要是用于用戶(hù)信息添加、刪除、修改; 2.1.3性能需求分析 (1)登錄、用戶(hù)界面需求:簡(jiǎn)潔、易懂、易用、友好的用戶(hù)界面。(2)安全保密性需求:只有憑借用戶(hù)名和密碼登陸系統(tǒng),只有管理員才能進(jìn)行信息的管理,非管理員只能查看信息。 總體設(shè)計(jì) 3.1設(shè)計(jì)概述 根據(jù)需求把整個(gè)系統(tǒng)分化成不同的模塊,每個(gè)模塊完成一個(gè)特定的子功能。把這些模塊結(jié)合起來(lái)組成一個(gè)整體。逐一實(shí)現(xiàn)各個(gè)功能; 3.2系統(tǒng)總體結(jié)構(gòu)及功能模塊劃分 經(jīng)過(guò)對(duì)系統(tǒng)的需求分析,學(xué)生信息管理系統(tǒng)主要?jiǎng)澐譃槿齻€(gè)部分:學(xué)生信息查詢(xún),學(xué)生信息管理,學(xué)生成績(jī)錄入三個(gè)功能模塊。如圖3.2.0 系統(tǒng)的總體結(jié)構(gòu)。 學(xué)生信息管理系統(tǒng)學(xué)生信息管理 學(xué)生課程管理學(xué)生成績(jī)管理系統(tǒng)用戶(hù)管理 圖3.2.0 系統(tǒng)的總體結(jié)構(gòu) 3.2.1學(xué)生信息管理模塊 學(xué)生信息管理:主要是用于學(xué)生信息添加、刪除、修改,如圖3.2.1學(xué)生信息管理模塊結(jié)構(gòu)。 學(xué)生信息管理模塊添加學(xué)生信息刪除學(xué)生信息修改學(xué)生信息 圖3.2.1 3.2.2學(xué)生課程管理模塊 學(xué)生課程管理:主要是用于學(xué)生課程添加、刪除、修改,如圖3.2.2學(xué)生課程管理模塊結(jié)構(gòu)。 學(xué)生課程管理模塊添加課程信息 刪除課程信息修改課程信息 圖3.2.2 3.2.3學(xué)生成績(jī)管理模塊 學(xué)生成績(jī)管理:主要是用于學(xué)生成績(jī)添加、刪除、修改,如圖3.2.3學(xué)生成績(jī)管理模塊結(jié)構(gòu)。 學(xué)生成績(jī)管理模塊添加學(xué)生成績(jī) 刪除學(xué)生成績(jī)修改學(xué)生成績(jī) 圖3.2.3 3.2.4系統(tǒng)用戶(hù)管理模塊 系統(tǒng)用戶(hù)管理:主要是用于系統(tǒng)用戶(hù)添加、刪除、修改,如圖3.2.4系統(tǒng)用戶(hù)管理模塊結(jié)構(gòu)。 系統(tǒng)用戶(hù)管理模塊添加用戶(hù) 刪除用戶(hù)修改用戶(hù) 圖3.2.4 3.3系統(tǒng)數(shù)據(jù)庫(kù)概念結(jié)構(gòu)設(shè)計(jì) 根據(jù)對(duì)數(shù)據(jù)項(xiàng)與數(shù)據(jù)結(jié)構(gòu)的分析,設(shè)計(jì)出能夠滿(mǎn)足系統(tǒng)需求的各種實(shí)體,及它們之間的關(guān)系,為后面的邏輯結(jié)構(gòu)設(shè)計(jì)打下基礎(chǔ)。3.3.1系統(tǒng)E-R圖 系統(tǒng)E-R圖可以將各個(gè)實(shí)體之間的關(guān)系顯示出來(lái),將各個(gè)實(shí)體間的屬性依賴(lài)表示明白。如圖3.3.1系統(tǒng)E-R圖結(jié)構(gòu)。 姓名性別年齡院系考核籍貫用戶(hù)表用戶(hù)名成績(jī)表學(xué)號(hào)學(xué)號(hào)課程ID課程名類(lèi)型學(xué)分學(xué)生表選課課程表理論學(xué)時(shí)實(shí)驗(yàn)學(xué)時(shí)用戶(hù)密碼用戶(hù)類(lèi)型成績(jī)課程名稱(chēng) 圖3.3.1系統(tǒng)E-R圖結(jié)構(gòu) 3.3.2系統(tǒng)數(shù)據(jù)庫(kù)的設(shè)計(jì) 綜合以上分析,要實(shí)現(xiàn)上面的所有功能模塊,主要設(shè)計(jì)表如下: 表3.3.2.1 用戶(hù)表(user) 表3.3.2.2成績(jī)表(grade) 表3.3.2.3課程表(course) 表3.3.2.4學(xué)生表(stu) 3.3.3數(shù)據(jù)庫(kù)的連接配置 ①先在項(xiàng)目中引用MySQLDriverCS.dll ②類(lèi)添加 using MySQLDriverCS;③MySQLConnection conn = new MySQLConnection(new MySQLConnectionString(“數(shù)據(jù)庫(kù)名”, “Server帳號(hào)”, “密碼”).AsString);3.4安全保密設(shè)計(jì) 3.4.1用戶(hù)登錄安全性 系統(tǒng)設(shè)計(jì)了登錄界面,每個(gè)合法用戶(hù)有用戶(hù)名及一個(gè)密碼,只有當(dāng)用戶(hù)輸入正確的用戶(hù)名及密碼組合后才能夠?qū)W(xué)生信息進(jìn)行操作。 詳細(xì)設(shè)計(jì) 4.1概述 詳細(xì)設(shè)計(jì)階段的根本目標(biāo)是確定應(yīng)該怎樣具體的實(shí)現(xiàn)所要求的系統(tǒng),也就是說(shuō),經(jīng)過(guò)這個(gè)階段的設(shè)計(jì)工作,應(yīng)該得出目標(biāo)系統(tǒng)的精確描述,從而在編碼階段可以把這個(gè)描述直接翻譯成用某種程序設(shè)計(jì)語(yǔ)言書(shū)寫(xiě)的程序。 4.2系統(tǒng)程序流程圖 程序流程圖又稱(chēng)為程序框圖,它是歷史悠久使用最廣泛的描述軟件設(shè)計(jì)的方法。它可將整個(gè)程序的總體流程清楚明白的顯示出來(lái)。如圖4.2.1系統(tǒng)總流程圖結(jié)構(gòu)。 圖4.2.1系統(tǒng)總體流程圖 4.3系統(tǒng)主要功能模塊簡(jiǎn)介 4.3.1系統(tǒng)登錄 用戶(hù)憑借用戶(hù)名及密碼登錄,成功登錄后可對(duì)學(xué)生信息進(jìn)行操作。用戶(hù)界面如圖4.3.1 用戶(hù)登錄界面所示。 圖4.3.1 用戶(hù)登錄界面 4.3.2學(xué)生信息管理模塊 學(xué)生信息管理:通過(guò)程序主界面的添加學(xué)生信息按鈕可添加學(xué)生信息(如圖 4.3.2添加信息窗口)。學(xué)生信息進(jìn)行詳細(xì)信息管理(如圖4.3.3 信息管理)包括刪除信息(如圖 4.3.4刪除信息提示)和修改信息(如圖4.3.5 修改信息窗口)。 圖4.3.2添加信息窗口 圖4.3.3 信息管理 圖4.3.4刪除信息提示 圖4.3.5 修改信息窗口 4.3.3學(xué)生課程管理模塊 學(xué)生課程管理:通過(guò)程序主界面的菜單-->系統(tǒng)-->課程管理 可添加課程信 14 息(如圖 4.3.5信息管理)和 詳細(xì)的課程管理(如圖4.3.6 添加信息窗口)和(如圖4.3.7 刪除信息提示)和(如圖4.3.8 修改信息窗口)。 圖 4.3.5信息管理 4.3.6 添加信息窗口 圖4.3.7 刪除信息提示 圖4.3.8 修改信息窗口 4.3.4學(xué)生成績(jī)管理模塊 學(xué)生信息管理:選擇一行學(xué)生信息通過(guò)程序主界面的查看-->學(xué)生成績(jī)按鈕,查看該學(xué)生的成績(jī)信息(如圖 4.3.7查看信息窗口)。查看后還可以添加該學(xué)生的成績(jī)(如圖 4.3.8添加信息窗口)、刪除該學(xué)生的成績(jī)(如圖 4.3.9刪除提示窗口)和修改該學(xué)生的成績(jī)(如圖 4.3.10修改信息窗口) 圖4.3.7成績(jī)管理 4.3.8添加信息窗口 圖 4.3.9刪除提示窗口 17 圖 4.3.10修改信息窗口 4.3.5系統(tǒng)用戶(hù)管理模塊 系統(tǒng)用戶(hù)管理:通過(guò)程序主界面的菜單-->系統(tǒng)-->用戶(hù)管理,查看該系統(tǒng)用戶(hù)的信息(如圖 4.3.11查看信息窗口)。查看后還可以添加該系統(tǒng)的用戶(hù)(如圖 4.3.12添加信息窗口)、刪除該系統(tǒng)的用戶(hù)(如圖 4.3.13刪除提示窗口)和修改該系統(tǒng)的用戶(hù)(如圖 4.3.14修改信息窗口) 4.3.11查看信息窗口 圖 4.3.12添加信息窗口 圖 4.3.13刪除提示窗口 圖 4.3.14修改信息窗口 4.3.6版權(quán)關(guān)于 版權(quán)關(guān)于:圖4.3.15版權(quán)關(guān)于 圖4.3.15版權(quán)關(guān)于 主要功能模塊代碼 5.1 登錄界面代碼設(shè)計(jì) 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 = ”非管理員“;} // 如果輸入的帳號(hào)和密碼與系統(tǒng)的帳號(hào)密碼一致就進(jìn)入本系統(tǒng) con.Open();MySQLCommand setformat = new MySQLCommand(”set names gb2312“, con);setformat.ExecuteNonQuery();setformat.Dispose(); string sql = ”select * from user where 用戶(hù)名='“ + id + ”' and 用戶(hù)密碼='“ + password + ”'and 用戶(hù)類(lèi)型='“ + 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 + ”:的成績(jī)單“; con.Open(); MySQLCommand setformat = new MySQLCommand(”set names gb2312“, con);setformat.ExecuteNonQuery();setformat.Dispose();string sql1 = ”select * from grade where 學(xué)號(hào)=“+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(”該學(xué)號(hào)的學(xué)生已存在!“);} else { { } { { } { flag_exception = 1;} { } { + sex + ”',“ + if(id.Equals(”“))MessageBox.Show(”請(qǐng)輸入學(xué)號(hào)!“);else try Int64 id1 = Convert.ToInt64(id);catch(FormatException)if(flag_exception == 1)MessageBox.Show(”請(qǐng)輸入正確的學(xué)生學(xué)號(hào)!“);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 系統(tǒng)用戶(hù)管理模塊代碼設(shè)計(jì) 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(“是否要?jiǎng)h除用戶(hù)名為:” + id + “ 的用戶(hù)?”, “確認(rèn)”, 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 用戶(hù)名='” + id + “'”;MySQLCommand command = new MySQLCommand(sql, Students.con);command.ExecuteNonQuery();Students.con.Close();MessageBox.Show(“刪除成功!”, “提示!”, MessageBoxButtons.OK);} } catch(ArgumentOutOfRangeException){ MessageBox.Show(“您還沒(méi)有選擇一行要?jiǎng)h除的數(shù)據(jù)!”);} catch(NullReferenceException){ MessageBox.Show(“您選擇行的數(shù)據(jù)無(wú)效!”);} } 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 用戶(hù)名='” + 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(“您還沒(méi)選擇一行要修改的數(shù)據(jù)!”);} catch(NullReferenceException){ MessageBox.Show(“您選擇行的數(shù)據(jù)無(wú)效!”);} } } } 5.3.1添加系統(tǒng)用戶(hù)模塊代碼設(shè)計(jì) 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 用戶(hù)名='” + 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 + “個(gè)課程的信息!”);if(rowcount == 0){ MessageBox.Show(“您還未添加課程!”);} Students.con.Close();} } } 5.4.1添加課程信息模塊代碼設(shè)計(jì) 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#課程設(shè)計(jì)報(bào)告書(shū)