C语言学生成绩管理系统课程设计报告.doc

上传人:知****量 文档编号:12983158 上传时间:2022-04-27 格式:DOC 页数:61 大小:881KB
返回 下载 相关 举报
C语言学生成绩管理系统课程设计报告.doc_第1页
第1页 / 共61页
C语言学生成绩管理系统课程设计报告.doc_第2页
第2页 / 共61页
点击查看更多>>
资源描述

《C语言学生成绩管理系统课程设计报告.doc》由会员分享,可在线阅读,更多相关《C语言学生成绩管理系统课程设计报告.doc(61页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、. .设计一个学生成绩管理系统,对上学期的本班的学习成绩进展管理,具有查询和检索功能,并且能够对指定文件操作,也可将多个文件组成一个文件。A、 设计容1、每一条记录包括一个学生的学号、XX、性别、各门课成绩上学期的科目、平均成绩。2、输入功能:可以一次完成假设干条记录的输入。3、显示功能:完成全部学生记录的显示。4、查找功能:完成按XX或学号查找学生记录,并显示。5、排序功能:按学生平均成绩进展排序。6、插入功能:按学号顺序插入一条学生记录。7、将学生记录存在文件student.dat中。8、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观!B、设计要求一、 有存储本

2、班学生记录包括学号、XX、科目成绩、性别、的文件student.dat,所有学生以学号从小到大排序该文件自行建立。要求编程序实现查询、排序、插入、删除诸功能。具体要求如下:A要求显示如下界面*1-查询2-排序3-插入4-删除*通过选择1-4来确定要做哪一个操作。B假设选1,那么出现如下界面*1.1-按学号查询1.2-按XX查询1.3-按成绩查询*通过选择1.1-1.3来确定要做哪一个操作,其中:按XX查询用顺序法实现;按成绩查询实现查询成绩小于m分的学生;找到该生将学生记录输出到屏幕,假设查无此人,输出相关信息。C假设选2,那么按成绩从大到小排序,XX,学号顺序也随之调整。D假设选3,将一个新

3、学生记录按学号顺序插入,并把结果保存到文件student.dat中。E假设选4,删除指定学生的记录,并把结果保存到文件student.dat中。G不同的模块都要有出错处理,并能给出出错提示。如输入数据错误,文件操作错误等等F以上各个功能均编写成子函数,由主函数调用实现。G利用构造体数组实现学生成绩的数据构造设计;模块:学生成绩管理系统查询模块排序模块显示模块保存模块删除模块插入模块完毕显示返回插入返回选择返回保存返回按学号查询按学号选择删除按XX选择删除返回主菜单按XX查询按成绩查询排序返回数学平均分英语C语言安康教育返回计算机历史程序构造图:main:int flag=1;struct st

4、udent *head=NULL;head=load();Doswitch(menu()case 0:flag=0;break;case 1:search(head);break;case 2:sort(head);break;case 3:head=NULL?head=insert(head):insert(head); save(head); break;case 4:head=delete(head);save(head);break;case 5:save(head);printf(Its saved!);getch();break;case 6:clrscr();formhead()

5、;print(head);break;while(flag)frees(head);int menu();char ch;textmode(C80);textbackground(BLUE);textcolor(YELLOW);clrscr();gotoxy(20,3);cprintf(Students performance management system);gotoxy(20,6);cprintf(*);gotoxy(30,8); cprintf(1-Search;);gotoxy(30,10); cprintf(2-Sort;);gotoxy(30,12); cprintf(3-In

6、sert;);gotoxy(30,14); cprintf(4-Delete;);gotoxy(30,16); cprintf(5-Save in file;);gotoxy(30,18); cprintf(6-Display;);gotoxy(30,20); cprintf(0-Exit;);gotoxy(20,22); cprintf(*);gotoxy(1,25); cprintf(please press the number you choose:);ch=getchar();return ch;int menu2();char ch;textmode(C80);textbackgr

7、ound(BLUE);textcolor(YELLOW);clrscr();gotoxy(34,5); cprintf(Query menu);gotoxy(20,8); cprintf(*);gotoxy(25,10); cprintf(1-search by ID number;);gotoxy(25,12); cprintf(2-search by name;);gotoxy(25,14); cprintf(3-search by score;);gotoxy(25,16); cprintf(0-Return to main menu;);gotoxy(20,20); cprintf(*

8、);gotoxy(1,25); cprintf(please press the number you choose:);ch=getchar();return ch;int menu3();char ch;textmode(C80);textbackground(BLUE);textcolor(YELLOW);clrscr();clrscr();gotoxy(20,3); cprintf(Enter the number of subjects to check);gotoxy(20,6); cprintf(*);gotoxy(25,8);cprintf(1-Math;);gotoxy(25

9、,9); cprintf(2-English;);gotoxy(25,10); cprintf(3-C Program;);gotoxy(25,11);cprintf(4-puter;);gotoxy(25,12);cprintf(5-Health Education;);gotoxy(25,13);cprintf(6-History;);gotoxy(25,14);cprintf(7-average;);gotoxy(25,15);cprintf(0-Return to previous menu;);gotoxy(20,18); cprintf(*);gotoxy(1,25); cprin

10、tf(please press the number you choose:);ch=getchar();return ch;void search(struct student *head);int flag=1; while(flag)switch(menu2()case 49:search1(head);break;case 50:search2(head);break;case 51:search3(head);break;case 48:flag=0;break;void search1(struct student *);struct student *p;int none=1;c

11、har number11;p=head;clrscr();printf(please in put a students number:);scanf(%s,number); 直到确认printf(Search results:n);formhead(); while(p!=0)NY (strcmp(p-num,number)=0?putout(p);none=0;p=p-next;NYNone=0?printf(ncan not find the data!) printf(npress any key to return.);getch();void search2(struct stud

12、ent *);int none=1; char name11;struct student *p;p=head;clrscr();printf(please in put a students name:);scanf(%s,name);直到确认clrscr();printf(Search results:n);formhead();while(p!=NULL)NYstrcmp(p-name,name)=0?putout(p);none=0;p=p-next;YNnone=0?printf(ncan not find the data!);printf(npress any key to re

13、turn.);getch();void search3(struct student *);p1=head;m=menu3() 直到0=mmath-highnext;YNNone=0?printf(ncan not find the data!)printf(npress any key to return.);getch();break;2与1同理3与1同理4与1同理5与1同理6与1同理7与1同理struct student *sort(struct student *);struct student *p1,*p2,*t,*temp;temp=head-next;head-next=NUL

14、L;while(temp!=NULL)t=temp;temp=temp-next;p1=head; p2=head; while(t-averaver&p1!=NULL)p2=p1;p1=p1-next;NYp1=p2?t-next=p1;t-next=p1;p2-next=t;head=t;p1=head;while(p1!=NULL)p1=p1-next;clrscr();formhead();print(head);return(head);struct student *insert(struct student *);struct student *p,*q,*hed;hed=hea

15、d;p=creat(); /*建链表*/q=findw(head); /*找出传进来链表的表尾*/NYq=NULL?q-next=p;return hed=NULL?p:hed;void input(struct student *);float temp;char c;clrscr();printf(input the students number:);scanf(%s,p-num); 直到确认printf(ninput the students name:);scanf(%s,p-name);while(!sure(); 直到确认c=getchar();p-sex=ca?c-32:c;

16、直到(p-sex=M|p-sex=W)printf(input the students Math score:scanf(%f,&temp); 直到确认p-math=temp;下面成绩同理void putout(struct student *);printf(n|%-10s|%-10s| %c |%-6.1f|%-6.1f|%-6.1f|%-6.1f|%-6.1f|%-6.1f|%-6.1f|, p-num,p-name,p-sex,p-math,p-english,p-cp,p-puter,p-hthy,p-history,p-aver);printf(n+-+-+-+-+-+-+-+-

17、+-+-+);void print(struct student *);struct student *p;p=head;YNp!=NULLputout(p);p=p-next;printf(Itsa empty list!n); 直到p为空getch();int sure();har c;getchar();printf(Press any key if you are sure but Esc:);c=getch();YNc=27return 1;return 0;void frees( struct student *);struct student *p;p=head;while(p!

18、=0)free(p);p=p-next;head=NULL;struct student *creat(void);char c;struct student *p1,*p2,*head;int n=0,flag=1;p1=p2=(struct student *)malloc(LEN);head=NULL; input(p1);while(flag) n=n+1;n=1?head=p1:p2-next=p1;p2=p1;if(flag=1) printf(ncontinue or not?(Y/N):);if(flag=2) printf(npress Y(y) or N(n) only:)

19、;c=getch();YN(c=N|c=n|c=Y|c=y)?flag=2;NYc=Y|c=y?flag=0;p1=(struct student *)malloc(sizeof(struct student);input(p1);flag=1;p2-next=NULL;return (head);struct student *load(void);struct student *p1,*p2,*head=NULL;FILE *fp;YNfp=fopen(student.dat,rb)=NULLprintf(fail to open the file!n);return (0);printf

20、(loading.n);p1=(struct student *)malloc(LEN);YN!p1?printf(out of memory!ngetch();return(0);head=p1while(!feof(fp)NYfread(p1,LEN,1,fp)!=1?break;p1-next=(struct student *)malloc(LEN);NY!p1-next/printf(Out of memory!n);return (head);p2=p1; p1=p1-next;p2-next=NULL;fclose(fp);return (head);void save(stru

21、ct student *);FILE *fp;struct student *p;Nfp=fopen(student.dat,wb)=NULL?Yprintf(fail to open the file!n);getch();return;p=head;while(p!=NULL)fwrite(p,LEN,1,fp);p=p-next;fclose(fp);struct student *findw(struct student *);struct student *p;p=head;Np=NULL? Yreturn p;while(p-next!=NULL)p=p-next;return (

22、p);struct student *delete(struct student *);char del11;char x;int none=1; struct student *p1,*_del;p1=_del=head;Np1=NULL? Yclrscr();printf(there is no data!press any key to back.);getch();return 0;clrscr();printf(nnnnnnnnnnnn 1-By Student Number to delete;);printf(nn 2-By Student Name to delete;);pr

23、intf(nn 0-cancel;n);printf(nnnnnnnnnPlease enter you choice:); x=getchar(); 直到输入正确if(x=0)return head;if(x=1)clrscr();printf(enter number gonna Del:);scanf(%s,del); 直到确认while(_del=p1&_del!=NULL)N(strcmp(_del-num,del)=0) Yelse _del=p1-next;none=0; clrscr();printf(delete this data? Cancel by Esc:)formh

24、ead();putout(_del);Ngetch()=27 Yp1=_del-next;_del=p1-next;free(_del);del=p1;printf(nDelete successfully!);getch();head=p1;while(_del!=0)Nstrcmp(_del-num,del)=0 Yp1=p1-next;_del=_del-next;none=0; clrscr();printf(ndelete this data? Cancel by Esc:);formhead();putout(_del);Ngetch()=27? Yp1-next=_del-nex

25、t; p1=p1-next;free(_del);_del=_del-next;_del=p1-next; printf(nDelete successfully!);getch();N!none? Yprintf(Can not find the data.);printf(nNo more data.);getch();getch();if(x=2) 同x=1程序代码:#include stdio.h /*标准输入输出函数库*/#include stdlib.h /*标准函数库*/#include string.h /*字符串函数库*/#include conio.h /*屏幕操作函数库*

26、/#define HEADER1 -学生- n#define HEADER2 | 学号 | XX |C语言|数学|英语 | 总分 | 平均分 |排名 | n#define HEADER3 |-|-|-|-|-|-|-|-| #define FORMAT | %-10s |%-15s|%4d|%4d|%4d| %4d | %.2f |%4d |n#define DATA p-data.num,p-data.name,p-data.egrade,p-data.mgrade,p-data.cgrade,p-data.total,p-data.ave,p-data.mingci#define END

27、- nint saveflag=0; /*是否需要存盘的标志变量*/*定义与学生有关的数据构造*/typedef struct student /*标记为student*/char num10; /*学号*/char name15; /*XX*/int cgrade; /*C语言成绩*/int mgrade; /*数学成绩*/int egrade; /*英语成绩*/int total; /*总分*/float ave; /*平均分*/int mingci; /*名次*/;/*定义每条记录或结点的数据构造,标记为:node*/typedef struct nodestruct student d

28、ata; /*数据域*/struct node *next; /*指针域*/Node,*Link; /*Node为node类型的构造变量,*Link为node类型的指针变量*/void menu() /*主菜单*/system(cls); /*调用DOS命令,清屏.与clrscr()功能一样*/textcolor(10); /*在文本模式中选择新的字符颜色*/gotoxy(10,5); /*在文本窗口中设置光标*/printf( 学生成绩管理系统 n);/gotoxy(10,8);printf( *Menu*n);/gotoxy(10,9);printf( * 1 输入数据 2 删除数据 *n

29、);/gotoxy(10,10);printf( * 3 查询数据 4 修改数据 *n);/gotoxy(10,11);printf( * 5 插入数据 6 统计数据 *n);/gotoxy(10,12);printf( * 7 数据排序 8 保存数据 *n);/gotoxy(10,13);printf( * 9 显示数据 0 退出系统 *n);/gotoxy(10,14);printf( *n);/*cprintf()送格式化输出至文本窗口屏幕中*/void printheader() /*格式化输出表头*/ printf(HEADER1); printf(HEADER2); printf(

30、HEADER3);void printdata(Node *pp) /*格式化输出表中数据*/ Node* p; p=pp; printf(FORMAT,DATA);void Wrong() /*输出按键错误信息*/printf(nnnnn*错误:输入有错! 按任意键继续*n);getchar();void Nofind() /*输出未查找此学生的信息*/printf(n=没找到该学生!n);void Disp(Link l) /*显示单链表l中存储的学生记录,容为student构造中定义的容*/Node *p;p=l-next; /*l存储的是单链表中头结点的指针,该头结点没有存储学生信息,

31、指针域指向的后继结点才有学生信息*/if(!p) /*p=NULL,NUll在stdlib中定义为0*/ printf(n=没该学生记录!n); getchar(); return;printf(nn);printheader(); /*输出表格头部*/while(p) /*逐条输出链表中存储的学生信息*/ printdata(p); p=p-next; /*移动直下一个结点*/ printf(HEADER3);getchar();/*作用:用于定位链表中符合要求的节点,并返回指向该节点的指针参数:findmess保存要查找的具体容; nameornum保存按什么查找; 在单链表l中查找;*/

32、Node* Locate(Link l,char findmess,char nameornum)Node *r;if(strcmp(nameornum,num)=0) /*按学号查询*/ r=l-next; while(r) if(strcmp(r-data.num,findmess)=0) /*假设找到findmess值的学号*/ return r; r=r-next; else if(strcmp(nameornum,name)=0) /*按XX查询*/ r=l-next; while(r) if(strcmp(r-data.name,findmess)=0) /*假设找到findmes

33、s值的学生XX*/ return r; r=r-next; return 0; /*假设未找到,返回一个空指针*/*输入字符串,并进展长度验证(长度lens)printf(n 超过这必需的长度! n); /*进展长度校验,超过lens值重新输入*/ while(strlen(n)lens); strcpy(t,n); /*将输入的字符串拷贝到字符串t中*/*输入分数,0分数100 | t100 | tnext;system(cls);Disp(l); /*先打印出已有的学生信息*/while(r-next!=NULL) r=r-next; /*将指针移至于链表最末尾,准备添加记录*/while(1) /*一次可输入多条记录,直至输入学号为0的

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 研究报告 > 设计方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁