1、成绩评估教师签名嘉应学院 计算机学院数据构造实验报告课程名称:数据构造开课学期:-第1学期班 级:1401指引教师:钟治初实验题目:学生成绩管理系统学 号:姓 名:苏永达提交时间:10月27日一、 实验规定:(1) 设计一种学生成绩管理系统,模仿高考成绩管理。功能至少涉及数据输入,输出,查找,插入,删除,修改,排序,记录各成绩段人数,考生成绩排位,报考志愿检索等。(2) 所有输入输出数据均使用文本文献进行读写。(3) 所有过渡性数据使用二进制文献进行读写和保存。(4) 设计使用平行志愿进行出档。(5) 设计使用非平行志愿行进出档。(6) 设计志愿时,可以设计12个志愿,如果平行志愿,则先后各6
2、个分别为第一组和第二组平行志愿解决。(7) 设计考生记录字段时,可以预留补录志愿字段。或者将未录取考生数据进行备份,然后将志愿清空后再增长补录志愿。二、功能: (1) 按学号顺序输入学生信息,涉及学号、姓名、性别、课程单科成绩(单科成绩涉及C语言、高数、大学语文、汇编、中近史),并存入文献中。(2) 从文献读取数据(3) 删除学生信息(4) 查询学生信息(查询可分为精准查询和模糊查询)(5) 修改学生信息(规定修改后,数据依然是按学号顺序排列)(6) 插入学生信息(规定插入后,数据依然是按学号顺序排列)(7) 附加功能,学生可自由发挥,如:排名、求各门课程平均分等。三、实验目1、掌握和巩固C语
3、言编写有关知识和技巧,特别是函数、指针、构造体。2、可以采用模块化思想调试程序。3、通过该课程设计操作与实践,可以依照数据对象特性,学会数据组织办法,把现实世界中实际问题在计算机内部表达出来,并培养基本、良好程序设计技能,全面提高学生程序设计、开发能力。四、系统分析4.1 有关基本知识 选取、循环、函数、指针、构造体、链表4.2 总体方案 架构图: 方案描述:菜单:运用switch case选取功能,在每个case中有相相应调用语句,调用相相应函数。删除功能:调用删除函数,判断与否保存,如果保存写入文献。插入功能:运用链表插入。修改功能:调用删除函数跟插入函数,先删除再插入,从而实现修改功能。
4、查询功能:调用菜单中查询函数,用循环实现查询功能。排名功能:调用菜单中排名函数,通过冒泡排序法实现功能。保存功能:运用写入文献。五、系统设计定义一种student类型构造体,里面包括学生信息,涉及学号、姓名、性别、课程单科成绩(单科成绩涉及C语言、高数、大学语文、汇编、中近史)、总分、平均成绩。5.1 新建功能 从键盘输入N个学生基本信息,涉及学号、姓名、性别、课程单科成绩(单科成绩涉及C语言、高数、大学语文、汇编、中近史),编程依照输入信息计算各学生总分和平均分。创立动态链表,将学生信息存入链表中。在DOS屏幕上打印链表内所有学生信息。新建一种文献,将动态链表中数据(即输入学生信息)存入文献
5、中。5.2 打开功能打开一种文献,从文献中读取学生信息,并新建链表,将数据存入动态链表。在DOS屏幕上打印链表内所有学生信息。5.3 修改功能 在DOS屏幕上打印出当前所有学生信息。输入待修改学生学号,若不存在,输出“查无此人”;若存在,则输入修改信息,并存回学生信息链表中,存回后学生信息链表依然是按学号顺序排列。最后在DOS屏幕上打印出新所有学生信息。5.4 插入功能在DOS屏幕上打印出当前所有学生信息。输入插入信息条数,从第一条开始到最后一条,依次输入每条学生信息,涉及学号、姓名、性别、课程单科成绩(单科成绩涉及C语言、高数、大学语文、汇编、中近史),依照输入信息计算各学生总分和平均分。若
6、输入学生学号已经存在,则输出“该学号已存在,无法操作!”,否则将学生信息插入到链表中,插入后链表中数据依然按照学号排列。最后在DOS屏幕上打印出新所有学生信息。5.5 查询功能查询分为:精准查询、模糊查询精准查询:(1) 按姓名查询 输入待查询姓名; 依照顺序查询办法,对学生姓名依次查询,直到查询到与输入信息相匹配信息,并在DOS屏幕上显示出来。若需要查询信息不存在,系统则会提示找不到此人。可重复查询。(2) 按学号查询输入待查询学号; 依照顺序查询办法,对学生学号依次查询,直到查询到与输入信息相匹配信息,并在DOS屏幕显示出来。若需要查询信息不存在,系统则会提示找不到此人。可重复查询。模糊查
7、询:(1) 按姓氏查询 输入待查询姓氏; 依照顺序查询办法,对学生姓依次查询,当查询到与输入信息相匹配信息,则在DOS屏幕显示出来,直到链表结束。若需要查询信息不存在,系统则会提示找不到有关信息。可重复查询。(2) 按性别查询 输入待查询性别; 依照顺序查询办法,对学生性别依次查询,当查询到与输入信息相匹配信息,则在DOS屏幕显示出来,直到链表结束。可重复查询。5.6 删除功能 在DOS屏幕上打印出当前所有学生信息。(1)按姓名删除输入需要删除学生姓名; 依照顺序查询办法,对学生姓名依次查询,当查询到与输入信息相匹配信息,则删除该生信息,并在DOS屏幕显示出新所有学生信息。若需要删除信息不存在
8、,系统则会提示删除失败。(2)按学号删除输入需要删除学生学号; 依照顺序查询办法,对学生学号依次查询,当查询到与输入信息相匹配信息,则删除该生信息,并在DOS屏幕显示出新所有学生信息。若需要删除信息不存在,系统则会提示删除失败。5.7排名功能 可依照学生总分进行排名,并在DOS屏幕上输出排名成果。5.8 关于咱们 在DOS屏幕上输出系统有关信息。5.9 软件阐明5.10 退出保存 选取0退出系统,保存功能在每段函数结束后实现。5.10运营成果5.10.0 主界面 5.10.1 新建文献(输入一组数据,存入文献中)5.10.2 打开文献(打开文献,读取文献数据存入链表)5.10.3 修改功能5.
9、10.4 插入功能5.10.5 查询功能精准查询-按姓名查询精准查询-按学号查询模糊查询-按姓氏查询模糊查询-按性别查询5.10.6 删除功能按姓名删除按学号删除5.10.7 总分排名功能5.10.9 软件阐明5.10.10 退出保存保存功能在每段函数结束后实现。六、心得体会通过这次实验咱们更好掌握和巩固C语言编写有关知识和技巧,特别是函数、指针、构造体、链表等功能。通过该课程设计操作与实践,可以依照数据对象特性,学会数据组织办法,把现实世界中实际问题在计算机内部表达出来,并培养基本、良好程序设计技能,虽然在设计过程中遇到了不少问题麻烦,在教材数据协助下,完毕了这次程序设计。 七、源代码#in
10、clude #include #include /*-*/#define LEN sizeof(struct student)/构造体长度/*-*/#define NEW (struct student *)malloc(LEN)/*-*/FILE *fp;/*文献指针*/*-*/struct student int num; char name20;int score1,score2,score3,score4,score5;char sex;double aver;float sum; struct student *next;char filename100;struct student
11、 *creat( ) struct student *h; struct student *p,*q; printf(需要输入几条信息:); int i,n; scanf(%d,&n); printf(n-请按学号顺序依次输入学生信息-n); char c=getchar(); h=NULL; for(i=1;i=n;i+) p=NEW; if (p=NULL) printf(Allocation failuren); exit(0); printf(n); printf(输入姓名:); gets(p-name); printf(输入学号:); scanf(%d,&p-num); c=getc
12、har(); printf(输入性别:); scanf(%c,&p-sex); printf(输入c语言成绩:); scanf(%d,&p-score1); printf(输入高数成绩:); scanf(%d,&p-score2); printf(输入大学语文成绩:); scanf(%d,&p-score3); printf(输入汇编语言成绩:); scanf(%d,&p-score4); printf(输入中近史成绩:); scanf(%d,&p-score5); c=getchar(); p-sum=p-score1+p-score2+p-score3+p-score4+p-score5;
13、 p-aver=(p-score1+p-score2+p-score3+p-score4+p-score5)/5.0; p-next=NULL; if (h=NULL) /* h为空,表达新结点为第一种结点 */ h=p; /* 头指针指向第一种结点 */ else /* h不为空 */ q-next=p; /* 新结点与尾结点相连接 */ q=p;/* 使q指向新尾结点 */ return h; struct student *paixu (struct student *head) /* 总分排名 */ system(cls); printf(总分排名如下:n); struct stude
14、nt *op; struct student *p; struct student *p1,*p2; p1 = (struct student *) malloc (LEN); p1-next = head; head = p1; for (op = NULL;op != head;op = p) for (p = p1 = head;p1-next-next!=op;p1 = p1-next) if (p1-next-sum next-next-sum) p2 = p1-next-next; p1-next-next = p2-next; p2-next = p1-next; p1-next
15、 = p2; p = p1-next-next; p1 = head; head = head-next; free (p1); p1 = NULL; return head; void prlist(struct student *head)/*输出函数*/ struct student *p; p=head; printf(n学号 姓名 性别 c语言 高数 大学语文 汇编语言 中近史 总分 平均分n); while (p!=NULL) printf(%d %s %c %d %d %d %d %d %.1f %.2fn,p-num,p-name,p-sex,p-score1,p-score2
16、,p-score3,p-score4,p-score5,p-sum,p-aver); p=p-next; system(pause); /*-write将数据存入文献-*/void write(struct student *head) struct student *p; p=head; if(head!=NULL) while(p!=NULL)fwrite(p,LEN,1,fp);p=p-next; printf(文献更新成功!n);fclose(fp); system(pause);system(cls);/*-read将文献数据读入一种新链表中-*/struct student *re
17、ad(void) struct student *head; struct student *p1,*p2; head=NULL;p1=NEW;rewind(fp);/指向文献头fread(p1,LEN,1,fp); while(!feof(fp) if(head=NULL) head=p1; else p2-next=p1; p2=p1;p1=NEW; fread(p1,LEN,1,fp); p2-next=NULL;fclose(fp); return(head);void find(struct student *head)/* 查询功能 */ int t,s,i,j; struct s
18、tudent *p,*q; char x10,y2=0,c2; char k,f; p=head; printf(精准查找:n *1 按姓名查找n *2 按学号查找n 模糊查找n *3 按姓氏查找:n *4 按性别查找n); scanf(%d,&s); k=getchar(); if(s=1) printf(请输入姓名:); gets(x); while (p!=NULL) if (strcmp(x,p-name)=0) printf(n学号 姓名 性别 c语言 高数 大学语文 汇编语言 中近史 总分 平均分n);printf(%d %s %c %d %d %d %d %d %.1f %.2f
19、n,p-num,p-name,p-sex,p-score1,p-score2,p-score3,p-score4,p-score5,p-sum,p-aver);j=1;else i=1;q=p;p=p-next; else if(s=2) printf(按学号查找:n);scanf(%d,&t);while (p!=NULL)if (t=p-num) printf(n学号 姓名 性别 c语言 高数 大学语文 汇编语言 中近史 总分 平均分n);printf(%d %s %c %d %d %d %d %d %.1f %.2fn,p-num,p-name,p-sex,p-score1,p-scor
20、e2,p-score3,p-score4,p-score5,p-sum,p-aver);j=1;else i=1;q=p;p=p-next; else if(s=3) printf(按姓氏查询:n); gets(c); while ( p!=NULL) if (strncmp(c,p-name,1)=0) printf(n学号 姓名 性别 c语言 高数 大学语文 汇编语言 中近史 总分 平均分n);printf(%d %s %c %d %d %d %d %d %.1f %.2fn,p-num,p-name,p-sex,p-score1,p-score2,p-score3,p-score4,p-
21、score5,p-sum,p-aver);j=1;else i=1;q=p;p=p-next; else if(s=4) printf(按性别查询:n); f=getchar(); while(p!=NULL) if(f=p-sex) printf(n学号 姓名 性别 c语言 高数 大学语文 汇编语言 中近史 总分 平均分n); printf(%d %s %c %d %d %d %d %d %.1f %.2fn,p-num,p-name,p-sex,p-score1,p-score2,p-score3,p-score4,p-score5,p-sum,p-aver); j=1; else i=1
22、; q=p;p=p-next; if(i=1&j!=1) printf(Not found.输入错误n);system(pause);system(cls); struct student *delstudent(struct student *head)/* 删除功能 */ int s,n,m=1; char c; struct student *p,*q; char x10; while(m) printf( *1 按学号删除n *2 按姓名删除n); scanf(%d,&s); c=getchar(); printf(已有信息如下:n); prlist(head); if (head=N
23、ULL) printf(This is a empty list.); return head; p=head; switch(s) case 2: printf(请输入姓名:); gets(x); while (strcmp(x,p-name)!=0 & p-next!=NULL) q=p;p=p-next; if (strcmp(x,p-name)=0) if (p=head) head=p-next; else q-next=p-next; free(p); else printf(Not found.n);continue; ;m=0;break; case 1: printf(请输入
24、学号:); scanf(%d,&n); c=getchar(); while (n!=p-num & p-next!=NULL) q=p;p=p-next; if (n=p-num) if (p=head) head=p-next; else q-next=p-next; free(p); else printf(Not found.n);continue; ;m=0;break; default:printf(输入错误n);break; return head; void about()/* 关于咱们 */ system(cls); printf( ,_ nn);printf( (. ) (
25、)nn);printf( / / Hinn); printf( 成员简介nn);printf( 1.组长:nn);printf( 2.成员:nn);printf( 3.成员:nn);printf( 4.成员:nn);printf( 产品信息nn); printf( 一.产品用途:重要用于学生成绩管理与查询.nn);printf( 二.班级成绩管理系统重要涉及:数据录入 nn);printf( 读取 显示 删除 插入 查找 修改 排名.nn);system(pause);system(cls); void end() /*退出系统*/ char s;printf(与否退出系统Y/N?n);sca
26、nf(%c,&s);if(s=Y | s=y)exit(0);else if(s=N | s=n) return; else printf(输入错误,请重新输入nn);system(pause);return; struct student *insert(struct student *head,struct student *op)/* 插入功能 */ struct student *p,*q; if (head=NULL) head=op; /* 空表时,插入结点 */ op-next=NULL; else p=head; while (op-num p-num & p-next!=NU
27、LL) q=p;p=q-next; if (op-num=p-num) printf(n该学号已存在,无法插入!n); return head; else if(op-numnum) if (p=head) head=op; /* 在表头插入结点 */ else q-next=op; /* 在表中间插入结点 */ op-next=p; else p-next=op; /* 在表尾插入结点 */ op-next=NULL; return head; struct student *xiugai(struct student *head)/*修改功能*/struct student *op=NEW
28、;int c;head=delstudent(head);printf(请输入新名字:);gets(op-name); printf(请输入新学号:);scanf(%d,&op-num);c=getchar();printf(请输入新性别:);scanf(%c,&op-sex); printf(请输入新C语言成绩:); scanf(%d,&op-score1); printf(请输入新高数成绩:); scanf(%d,&op-score2); printf(请输入新大学语文成绩:); scanf(%d,&op-score3);printf(请输入新汇编成绩:); scanf(%d,&op-sc
29、ore4);printf(请输入新中近史成绩:); scanf(%d,&op-score5);c=getchar();op-sum=op-score1+op-score2+op-score3+op-score4+op-score5; op-aver=(op-score1+op-score2+op-score3+op-score4+op-score5)/5.0; op-next=NULL; head=insert(head,op);return head;struct student *ca(struct student *head)/*插入功能*/ struct student *op=NEW
30、; char c; printf(请输入名字:);gets(op-name); printf(请输入学号:);scanf(%d,&op-num);c=getchar(); printf(请输入性别:);scanf(%c,&op-sex); printf(请输入C语言成绩:); scanf(%d,&op-score1); printf(请输入高数成绩:); scanf(%d,&op-score2); printf(请输入大学语文成绩:); scanf(%d,&op-score3);printf(请输入汇编成绩:); scanf(%d,&op-score4);printf(请输入中近史成绩:);
31、scanf(%d,&op-score5);c=getchar();op-next=NULL;head=insert(head,op);op-sum=op-score1+op-score2+op-score3+op-score4+op-score5; op-aver=(op-score1+op-score2+op-score3+op-score4+op-score5)/5.0; return head;void help()/* 软件阐明 */ system(cls);printf(n 阐明 nnn);printf( 运营本软件需先使用新建文献或打开文献功能,否则运营出错。n); printf(
32、 每次使用修改 插入 删除等功能后需重新打开文献读取数据,n);printf( 否则得到数据是未保存。每运营完一种功能会自动返回到 n);printf( 主界面。 nnn); printf(nn 纯属原创 禁止抄袭 nn); system(pause);system(cls);/*-主函数 菜单-*/int main() system(color 9f);char c,r;struct student *head;int z;while(1)printf(n);printf( - nn);printf( 欢迎使用学生成绩管理系统 nn);printf( - nn);printf(*菜单*nn);printf(=nn);printf(* 1.新建文献 * 2.打开文献 *);printf(nn);printf(* 3.修改功能 * 4.插入功能 *);printf(nn);printf(* 5.查询功能 * 6.删除功能 *);printf(nn); printf(* 7.排名功能
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100