1、http:/www.ut365。com/cyuyan/10。html学生成绩管理系统(c语言)课程设计报告学生成绩管理系统要求是这样的1、用c语言编写一个简单的学生信息管理程序,能实现对学生信息的简单管理。2、具体要求:建立一个4个学生的信息登记表,每个学生的信息包括:学号,姓名,和3门课程的成绩(FOX,C,ENGLISH)。 程序运行时显示一个简单的菜单,例如: (1):信息输入(INPUT) (2):总分统计(COUNT) (3):总分排序(SORT) (4):查询(QUERY) 其中: (1):对4个学生的信息进行输入; (2):对每个学生的3门课程统计总分; (3):对4个学生的总分
2、按降序排序并显示出来; (4):查询输入一个学号后,显示出该学生的有关信息;。.。偶先写了个。.。i ncludeiostream.hi ncludestruct studentint num; char name20;int foxscore;int cscore;int englishscore; struct student next;void menu()cout” welecome to my student grade management systemendl;cout” please follow everyone step in the menu”endl;cout 1。in
3、put information”endl;cout 2.total scores”endl;cout” 3.sort”p1-namep1-foxscorep1cscorep1-englishscore; / 输入节点的值 p1- next = NULL; / 将新节点的指针置为空 while(p1-num0) if (head=NULL) head=p1; /空表,接入表头 else p2next=p1; / 非空表,接到表尾 p2 = p1; p1=(struct student )malloc(sizeof(struct student)); /申请下一个新节点cinp1-nump1-na
4、mep1foxscorep1-cscorep1-englishscore; /输入节点的值 return head; /返回链表的头指针void count(struct student *head)struct student temp;temp=head; /取得链表的头指针while(temp!=NULL)int m;m=tempfoxscore+temp-cscore+temp-englishscore; coutmnext; /跟踪链表增长void sort(struct student head)struct student *tp;tp=head;int a4;/定义总分数组in
5、t i,j,k;while(temp!=NULL)ai=tpfoxscore+tp-cscore+tp-englishscore;tp=tp-next;i=i+1;for(j=1;j=3;j+)/冒泡法排序for(k=1;k=4-j;k+)if(akak+1)int t=ak;ak=ak+1;ak+1=t;for(i=1;i5;i+)coutaiendl;void query(struct student head)struct student temper;temper=head;int number;cinnumber;for(int i=1;i=4;i+) if(number=tempe
6、r-num)cout name is:”tempernamefoxscoreendl;coutcscoreendl;cout English score is:”temper-englishscoreendl;cout” congratulation,syetem have found what you want to search”endl;temper=temper-next;void main()menu();cout” firstly,please input information:endl;struct student head;head=NULL; /* 建一个空表/ head=
7、creat(head); /* 创建单链表*/cout” secondly,count the total score each student:”endl;count(head);cout” thirdly,sorting the total score:endl;sort(head);cout” enter num that you can search each shtudents information”endl;query(head);cout thanks you for use my student grade management system”i ncludestruct s
8、tudentint num; char name20;int foxscore;int cscore;int englishscore; struct student next;void menu()cout welecome to my student grade management systemendl;cout” please follow everyone step in the menu”endl;cout 1。input information”endl;cout 2。total scores”endl;cout” 3。sortendl;cout” 4.queryendl;cou
9、t” *p1nump1namep1foxscorep1-cscorep1englishscore; / 输入节点的值 p1- next = NULL; / 将新节点的指针置为空 for(int i=1;inext=p1; / 非空表,接到表尾 p2 = p1; p1=(struct student )malloc(sizeof(struct student); /申请下一个新节点if(i=3)cinp1-nump1-namep1foxscorep1-cscorep1englishscore; /输入节点的值 return head; /返回链表的头指针void count(struct stu
10、dent head)struct student temp;temp=head; /取得链表的头指针 for(int i=1;i=4;i+) int m;m=tempfoxscore+temp-cscore+tempenglishscore; coutcscore+tp-englishscore;tp=tpnext;a3=tpfoxscore+tp-cscore+tpenglishscore;tp=tp-next;a4=tp-foxscore+tpcscore+tpenglishscore;for(j=1;j=3;j+)/冒泡法排序for(k=1;k=4j;k+)if(akak+1)int t
11、=ak;ak=ak+1;ak+1=t;for(i=1;i5;i+)coutaiendl;void query(struct student *head)struct student *temper;temper=head;int number;cinnumber;for(int i=1;i=4;i+) if(number=tempernum)cout name is:tempernameendl;cout” fox score is:temperfoxscoreendl;cout” c score is:”cscoreendl;cout English score is:temperengli
12、shscoreendl;cout” congratulation,syetem have found what you want to search”endl;temper=temper-next;void main()menu();cout” firstly,please input information:”endl;struct student head;head=NULL; / 建一个空表/ head=creat(head); /* 创建单链表*/cout secondly,count the total score each student:”endl;count(head);cou
13、t” thirdly,sorting the total score:”endl;sort(head);cout enter num that you can search each shtudents informationendl;query(head);cout” thanks you for use my student grade management system”#include stdlib.h#include dos.h#define LEFT 0x4b00define RIGHT 0x4d00#define DOWN 0x5000define UP 0x4800define
14、 ESC 0x011bint i,key;int score=0;/得分*/int gamespeed=50000;/*游戏速度自己调整/struct Food int x;/食物的横坐标/ int y;/食物的纵坐标/ int yes;/判断是否要出现食物的变量/food;/食物的结构体/struct Snake int xN; int yN; int node;/蛇的节数/ int direction;/*蛇移动方向/ int life;/ 蛇的生命,0活着,1死亡/snake;void Init(void);/图形驱动/void Close(void);/图形结束*/void DrawK
15、(void);/开始画面/void GameOver(void);/结束游戏/void GamePlay(void);/玩游戏具体过程*/void PrScore(void);/输出成绩*/主函数/void main(void) Init();/*图形驱动/ DrawK();/开始画面*/ GamePlay();/*玩游戏具体过程*/ Close();/图形结束/图形驱动/void Init(void) int gd=DETECT,gm; initgraph(&gd,&gm,”c:tc); cleardevice();/开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙
16、*/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 GamePl
17、ay(void) randomize();/*随机数发生器/ food.yes=1;/*1表示需要出现新食物,0表示已经存在食物/ snake.life=0;/*活着/ snake。direction=1;/方向往右*/ snake。x0=100;snake。y0=100;/蛇头/ snake。x1=110;snake。y1=100; snake。node=2;/*节数/ PrScore();/输出得分/ while(1)/可以重复玩游戏,压ESC键结束*/ while(!kbhit()/在没有按键的情况下,蛇自己移动身体*/ if(food。yes=1)/需要出现新食物/ food.x=ra
18、nd()400+60; food.y=rand()%350+60; while(food。x%10!=0)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到/food.x+; while(food.y10!=0)food.y+;food。yes=0;/画面上有食物了*/ if(food。yes=0)/*画面上有食物了就要显示/ setcolor(GREEN); rectangle(food.x,food。y,food。x+10,food。y10); for(i=snake。node-1;i0;i-)/蛇的每个环节往前移动,也就是贪吃蛇的关键算法/ snake。xi=snake。xi1
19、; snake.yi=snake。yi1; /1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头/ switch(snake。direction) case 1:snake。x0+=10;break; case 2: snake。x0-=10;break; case 3: snake.y0=10;break; case 4: snake.y0+=10;break; for(i=3;isnake。node;i+)/从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来/ if(snake.xi=snake。x0&snake。yi=snake。y0) GameOver
20、();/*显示失败/ snake。life=1; break; if(snake。x055|snake.x0595|snake。y055| snake.y0455)/蛇是否撞到墙壁*/ GameOver();/本次游戏结束*/ snake.life=1; /蛇死*/if(snake。life=1)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/ break;if(snake。x0=food。xsnake.y0=food.y)/*吃到食物以后/ setcolor(0);/*把画面上的食物东西去掉*/ rectangle(food。x,food.y,food。x+10,food。y10);
21、 snake。xsnake。node=20;snake.ysnake.node=20; /*新的一节先放在看不见的位置,下次循环就取前一节的位置*/ snake.node+;/蛇的身体长一节*/ food。yes=1;/*画面上需要出现新的食物/ score+=10; PrScore();/输出新得分/setcolor(4);/*画出蛇*/for(i=0;i /DOS接口函数/include /屏幕操作函数/#include stdio.h /*I/O函数/include stdlib。h /*库函数*/include /图形函数*/include string。h /*字符串函数/#incl
22、ude ctype。h /*字符操作函数/define UP 0x48 /光标上移键/#define DOWN 0x50 /光标下移键/define LEFT 0x4b /光标左移键/define RIGHT 0x4d /光标右移键*/#define ENTER 0x0d /回车键*/void *rar; /全局变量,保存光标图象/struct palettetype palette; /*使用调色板信息/int GraphDriver;/* 图形设备驱动*/int GraphMode;/ 图形模式值*/int ErrorCode;/* 错误代码/int MaxColors;/ 可用颜色的最大
23、数值/int MaxX, MaxY;/* 屏幕的最大分辨率/double AspectRatio;/* 屏幕的像素比*/void drawboder(void); /画边框函数*/void initialize(void); /初始化函数/void computer(void); /*计算器计算函数/void changetextstyle(int font, int direction, int charsize); /*改变文本样式函数*/void mwindow(char header); /窗口函数/int specialkey(void) ; /获取特殊键函数*/int arrow(
24、); /设置箭头光标函数/*主函数*/int main() initialize();/ 设置系统进入图形模式*/ computer();/运行计算器/ closegraph();/系统关闭图形模式返回文本模式*/ return(0); /*结束程序*/* 设置系统进入图形模式*/void initialize(void) int xasp, yasp;/ 用于读x和y方向纵横比*/ GraphDriver = DETECT; / 自动检测显示器*/ initgraph( &GraphDriver, &GraphMode, ” );/初始化图形系统*/ ErrorCode = graphres
25、ult();/*读初始化结果*/ if( ErrorCode != grOk ) /如果初始化时出现错误*/ printf(Graphics System Error: sn, grapherrormsg( ErrorCode ) ); /显示错误代码*/ exit( 1 ); /*退出/ getpalette( palette );/* 读面板信息/ MaxColors = getmaxcolor() + 1;/ 读取颜色的最大值/ MaxX = getmaxx(); /* 读屏幕尺寸/ MaxY = getmaxy(); / 读屏幕尺寸/ getaspectratio( &xasp, ya
26、sp );/* 拷贝纵横比到变量中/ AspectRatio = (double)xasp/(double)yasp;/ 计算纵横比值/*计算器函数/void computer(void) struct viewporttype vp; /定义视口类型变量/ int color, height, width; int x, y,x0,y0, i, j,v,m,n,act,flag=1; float num1=0,num2=0,result; /*操作数和计算结果变量/ char cnum5,str220=”,c,temp20=”; char str1=”1230.456+-789/Qc=%;/
27、 定义字符串在按钮图形上显示的符号 */ mwindow( Calculator” ); / 显示主窗口 */ color = 7; /设置灰颜色值/ getviewsettings( &vp ); /* 读取当前窗口的大小/ width=(vp.right+1)/10; / 设置按钮宽度 / height=(vp.bottom10)/10 ; /设置按钮高度 / x = width /2; /设置x的坐标值/ y = height/2;/设置y的坐标值/ setfillstyle(SOLID_FILL, color+3); bar( x+width*2, y, x+7width, y+hei
28、ght ); /画一个二维矩形条显示运算数和结果/ setcolor( color+3 ); /*设置淡绿颜色边框线/ rectangle( x+width2, y, x+7width, y+height ); /*画一个矩形边框线/ setcolor(RED); /设置颜色为红色*/ outtextxy(x+3width,y+height/2,”0。”); /输出字符串”0。*/ x =2widthwidth/2; /设置x的坐标值/ y =2height+height/2; /设置y的坐标值/ for( j=0 ; j4 ; +j ) /*画按钮/ for( i=0 ; i5 ; +i )
29、 setfillstyle(SOLID_FILL, color); setcolor(RED); bar( x, y, x+width, y+height ); /画一个矩形条/ rectangle( x, y, x+width, y+height ); sprintf(str2,”c”,str1j5+i); /将字符保存到str2中/ outtextxy( x+(width/2), y+height/2, str2); x =x+width+ (width / 2) ;/移动列坐标*/ y +=(height/2)3;/ 移动行坐标/ x =2widthwidth/2; /复位列坐标/ x0
30、=2width; y0=3height; x=x0; y=y0; gotoxy(x,y); /移动光标到x,y位置/ arrow(); /*显示光标/ putimage(x,y,rar,XOR_PUT); m=0; n=0; strcpy(str2,”); /设置str2为空串/ while(v=specialkey())!=45) /当压下Alt+x键结束程序,否则执行下面的循环/ while((v=specialkey()!=ENTER) /*当压下键不是回车时*/ putimage(x,y,rar,XOR_PUT); /*显示光标图象/ if(v=RIGHT) /*右移箭头时新位置计算/ if(x=x0+6*width) /如果右移,移到尾,则移动到最左边字符位置/ x=x0; m=0; else x=x+width+width/2; m+; /否则,右移到下一个字符位置/ if(v=LEFT) /*左移箭头时新位置计算/ if(x=x0) x=x0+6width; m=4; /*如果移到头,再左移,则移动到最右边字符位置*/ else x=xwidth-width/2;m; /否则,左移到前一个字符位置/ if(v=UP) /*上移箭头时新位置计算/ if(y=y0) y=y0+4height+height/2;n=3; /如果移到头,再上移,则移动到最下边字符位置*/