已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
设计一个学生成绩管理系统,对上学期的本班的学习成绩进行管理,具有查询和检索功能,并且能够对指定文件操作,也可将多个文件组成一个文件。A、 设计内容1、每一条记录包括一个学生的学号、姓名、性别、各门课成绩(上学期的科目)、平均成绩。2、输入功能:可以一次完成若干条记录的输入。3、显示功能:完成全部学生记录的显示。4、查找功能:完成按姓名或学号查找学生记录,并显示。5、排序功能:按学生平均成绩进行排序。6、插入功能:按学号顺序插入一条学生记录。7、将学生记录存在文件student.dat中。8、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观!B、 设计要求一、 已知有存储本班学生记录(包括学号、姓名、科目成绩、性别、)的文件student.dat,所有学生以学号从小到大排序(该文件自行建立)。要求编程序实现查询、排序、插入、删除诸功能。具体要求如下:A要求显示如下界面*1-查询2-排序3-插入4-删除*通过选择1-4来确定要做哪一个操作。B若选1,则出现如下界面*1.1-按学号查询1.2-按姓名查询1.3-按成绩查询*通过选择1.1-1.3来确定要做哪一个操作,其中:按姓名查询用顺序法实现;按成绩查询实现查询成绩小于m分的学生;找到该生将学生记录输出到屏幕,若查无此人,输出相关信息。C若选2,则按成绩从大到小排序,姓名,学号顺序也随之调整。D若选3,将一个新学生记录按学号顺序插入,并把结果保存到文件student.dat中。E若选4,删除指定学生的记录,并把结果保存到文件student.dat中。G不同的模块都要有出错处理,并能给出出错提示。如输入数据错误,文件操作错误等等F以上各个功能均编写成子函数,由主函数调用实现。G利用结构体数组实现学生成绩的数据结构设计;模块:学生成绩管理系统查询模块排序模块显示模块保存模块删除模块插入模块结束显示返回插入返回选择返回保存返回按学号查询按学号选择删除按姓名选择删除返回主菜单按姓名查询按成绩查询排序返回数学平均分英语C语言健康教育返回计算机历史程序结构图:main:int flag=1; struct student *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();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-Insert;);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);textbackground(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(*);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); cprintf(2-English;);gotoxy(25,10); cprintf(3-C Program;);gotoxy(25,11);cprintf(4-Computer;);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); cprintf(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;char 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;NY None=0?printf(ncan not find the data!) printf(npress any key to return.);getch();void search2(struct student *);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)NY strcmp(p-name,name)=0?putout(p);none=0;p=p-next;YNnone=0?printf(ncan not find the data!);printf(npress any key to return.); 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=NULL;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=head;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; 直到(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-computer,p-hthy,p-history,p-aver);printf(n+-+-+-+-+-+-+-+-+-+-+);void print(struct student *);struct student *p;p=head;YNp!=NULLputout(p);p=p-next;printf(Its a 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!=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:);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(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(struct 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 (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;);printf(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:)formhead();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-next; 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 /*屏幕操作函数库*/#define HEADER1 -学生- n#define HEADER2 | 学号 | 姓名 |C语言|数学|英语 | 总分 | 平均分 |排名 | n#define HEADER3 |-|-|-|-|-|-|-|-| #define FORMAT | %-10s |%-15s|%4d|%4d|%4d| %4d | %.2f |%4d |n#define DATA p-data.num,,p-data.egrade,p-data.mgrade,p-data.cgrade,p-data.total,p-data.ave,p-data.mingci#define END - nint saveflag=0; /*是否需要存盘的标志变量*/*定义与学生有关的数据结构*/typedef struct student /*标记为student*/char num10; /*学号*/char name15; /*姓名*/int cgrade; /*C语言成绩*/int mgrade; /*数学成绩*/int egrade; /*英语成绩*/int total; /*总分*/float ave; /*平均分*/int mingci; /*名次*/;/*定义每条记录或结点的数据结构,标记为:node*/typedef struct nodestruct student data; /*数据域*/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);/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(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存储的是单链表中头结点的指针,该头结点没有存储学生信息,指针域指向的后继结点才有学生信息*/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中查找;*/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) /*按姓名查询*/ r=l-next; while(r) if(strcmp(,findmess)=0) /*若找到findmess值的学生姓名*/ 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的记录结点添加操作*/ while(1) /*输入学号,保证该学号没有被使用,若输入学号为0,则退出添加记录操作*/ stringinput(num,10,输入学号(按0返回主菜单):); /*格式化输入学号并检验*/ flag=0; if(strcmp(num,0)=0) /*输入为0,则退出添加操作,返回主界面*/ return; s=l-next; while(s) /*查询该学号是否已经存在,若存在则要求重新输入一个未被占用的学号*/ if(strcmp(s-data.num,num)=0) flag=1; break; s=s-next; if(flag=1) /*提示用户是否重新输入*/ getchar(); printf(=这学号 %s 是目前的,在试一次?(y/n):,num); scanf(%c,&ch); if(ch=y|ch=Y) continue; else return; else break; p=(Node *)malloc(sizeof(Node); /*申请内存空间*/ if(!p) printf(n 分配内存失败 ); /*如没有申请到,打印提示信息*/ return ; /*返回主界面*/ strcpy(p-data.num,num); /*将字符串num拷贝到p-data.num中*/ stringinput(,15,姓名:); p-data.cgrade=numberinput(C 语言分数0-100:); /*输入并检验分数,分数必须在0100之间*/ p-data.mgrade=numberinput(数学分数0-100:); /*输入并检验分数,分数必须在0100之间*/ p-data.egrade=numberinput(英语分数0-100:); /*输入并检验分数,分数必须在0100之间*/ p-data.total=p-data.egrade+p-data.cgrade+p-data.mgrade; /*计算总分*/ p-data.ave=(float)(p-data.total/3); /*计算平均分*/ p-data.mingci=0; p-next=NULL; /*表明这是链表的尾部结点*/ r-next=p; /*将新建的结点加入链表尾部中*/ r=p; saveflag=1; return ;void Qur(Link l) /*按学号或姓名,查询学生记录*/int select; /*1:按学号查,2:按姓名查,其他:返回主界面(菜单)*/char searchinput20; /*保存用户输入的查询内容*/Node *p;if(!l-next) /*若链表为空*/ system(cls); printf(n=没有学生记录!n); getchar(); return;system(cls);printf(n =1 通过学号查询 =2 通过姓名查询n);printf( 请选择1,2:);scanf(%d,&select);if(select=1) /*按学号查询*/ stringinput(searchinput,10,输入目前的学生学号:); p=Locate(l,searchinput,num);/*在l中查找学号为searchinput值的节点,并返回节点的指针*/ if(p) /*若p!=NULL*/ printheader(); printdata(p); printf(END); printf(按任意键返回); getchar(); else Nofind(); getchar();else if(select=2) /*按姓名查询*/ stringinput(searchinput,15,输入目前的学生姓名:); p=Locate(l,searchinput,name); if(p) printheader(); printdata(p); printf(END); printf(按任意键返回); getchar(); else Nofind(); getchar();else Wrong(); getchar(); /*删除学生记录:先找到保存该学生记录的节点,然后删除该节点*/void Del(Link l)int sel;Node *p,*r;char findmess20;if(!l-next) system(cls); printf(n=没学生记录!n); getchar(); return;system(cls);Disp(l);printf(n =1 通过学号删除 =2 通过姓名删除n);printf( 请选择1,2:);scanf(%d,&sel);if(sel=1) stringinput(findmess,10,输入目前的学生学号:); p=Locate(l,findmess,num); if(p) /*p!=NULL*/ r=l; while(r-next!=p) r=r-next; r-next=p-next;/*将p所指节点从链表中去除*/ free(p); /*释放内存空间*/ printf(n=删除成功!n); getchar(); saveflag=1; else Nofind(); getchar();else if(sel=2) /*先按姓名查询到该记录所在的节点*/ stringinput(findmess,15,输入目前的学生姓名); p=Locate(l,findmess,name); if(p) r=l; while(r-nex
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 妊娠期心脏病合并血栓的防治策略
- 妊娠合并心血管疾病的智能管理策略
- 操作系统实验考试试题及答案
- 妊娠合并SBS肠内营养管理策略
- 头颈机器人术后心理干预策略-1
- 大数据驱动下的个性化医疗实践
- 语文考试准备题库及答案
- 初中艺术考试及答案解析
- 多组学数据整合的系统生物学视角
- 2026年仓储管理(仓储安全)试题及答案
- 小区场地租赁合同协议
- 2026年山东力明科技职业学院单招综合素质笔试备考试题带答案解析
- 2026贵州盐业集团校招面试题及答案
- 外研版小学英语三年级教学的上册-Module 6《 Unit 1 This is my school.》课件
- ZJ20350钻机使用说明书(并车)
- 人物速写经典教程课件
- GB/T 4393-2008呆扳手、梅花扳手、两用扳手技术规范
- GB/T 26218.2-2010污秽条件下使用的高压绝缘子的选择和尺寸确定第2部分:交流系统用瓷和玻璃绝缘子
- 涉外法治的概念与体系
- 公路工程施工安全监督重点课件
- 汽车租赁合同协议免费下载版5篇
评论
0/150
提交评论