ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:21.81KB ,
资源ID:25754711      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/25754711.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(学生成绩管理系统基本C语言编写.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

学生成绩管理系统基本C语言编写.docx

1、学生成绩管理系统基本C语言编写/代码版权所有,不要#include stdio.h #include stdlib.h #include string.h #include conio.hcopy,仅供参考学习。/标准输入输出函数库/标准函数库/字符串函数库/屏幕操作函数库#defineHEADER1 *学生成绩信息* nn#defineHEADER2 学 号姓名计算机数学 英语总分平均分名次 nn#define FORMAT %-10s %-10s %5d %5d %5d %5d%.3f %4d nDATA#define p-data.num,p-data.name,p-data.egrad

2、e,p-data.mgrade,p-data.cgrade,p-data.total,p-data.a ve,p-data.mingciint saveflag=0; /是否需要存盘的标志变量/定义与学生有关的数据结构/标记为 student/学号/姓名 /计算机成绩 /数学成绩 /英语成绩/总分/平均分/名次typedef struct student char num12; char name15; int cgrade; int mgrade; int egrade; int total;float ave; int mingci;sqlist;/定义每条记录或结点的数据结构,标记为:

3、nodetypedef struct nodestruct student data;/ 数据域struct node *next; /指针域Node,*Link; /Node 为 node 类型的结构变量, *Link 为 node 类型的指针变量void menu() /主菜单system(cls);/调用DOS 命令,清屏.与 clrscr() 功能相同printf(n);printf(学生成绩管理信息系统主菜单 nn);printf(*n);printf($1、添加记录6、 统计记录$n);printf($2、删除记录7、 排序记录$n);printf($3、查找记录8、保存记录$n)

4、;printf($4、修改记录9、显示记录$n);printf($5、插入信息0、退出系统$n);printf(*n);void printheader() / 格式化输出表头printf(HEADER1);printf(HEADER2);void printdata(Node *pp) / 格式化输出表中数据Node* p;p=pp;printf(FORMA T,DA TA);void Wrong() /输出按键错误信息printf(nnnnn*Error: 输入错误 !请按任意键继续 !*n); getchar();void Nofind() /输出未查找此学生的信息 printf(n=

5、未查找此学生的信息 !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; / 移动直下一个结

6、点getchar(); 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

7、(strcmp(nameornum,name)=0) /按姓名查询r=l-next;while(r) if(strcmp(r-data.name,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 |

8、 tnext;system(cls);Disp(l); /先打印出已有的学生信息 while(r-next!=NULL)r=r-next; /将指针移至于链表最末尾,准备添加记录while(1) /一次可输入多条记录,直至输入学号为 0 的记录结点添加操作while(1) /输入学号, 保证该学号没有被使用, 若输入学号为 0,则退出添加记录操作stringinput(num,12,n输入学号 (按“0”返回菜单 !):); /格式化输入学号并检验flag=0; if(strcmp(num,0)=0) / 输入为 0,则退出添加操作,返回主界面return;s=l-next;while(s)

9、/查询该学号是否已经存在,若存在则要求重新输入一个未被占用的学号 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;elsereturn;else break;p=(Node *)malloc(sizeof(Node); /申请内存空间 if(!p)printf(n 内存空间申请失败 ! ); / 如没有申请到,打印提示信息

10、return ; /返回主界面 strcpy(p-data.num,num); /将字符串 num 拷贝到 p-data.num 中stringinput(p-data.name,15, 姓名 :);p-data.cgrade=numberinput( 计算机 0-100:); / 输入并检验分数,分数必须在 0 100 之间p-data.mgrade=numberinput( 数学 0-100:); /输入并检验分数,分数必须在 0100 之间p-data.egrade=numberinput( 英语 0-100:); /输入并检验分数,分数必须在 0100 之间p-data.total=p

11、-data.egrade+p-data.cgrade+p-data.mgrade; / 计算总分 p-data.ave=(float)(p-data.total/3); /计算平均分p-data.mingci=0;r-next=p; / 将新建的结点加入链表尾部中p-next=NULL; / 表明这是链表的尾部结点r=p;saveflag=1;return ;/按学号或姓名,查询学生记录void Qur(Link l)int select; /1: 按学号查, 2:按姓名查,其他:返回主界面(菜单)char searchinput20; /保存用户输入的查询内容Node *p;if(!l-ne

12、xt) /若链表为空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,12, 请输入现有学生的学号 :); p=Locate(l,searchinput,num);/ 在 l 中查找学号为 searchinput 值的节点,并返回节 点的指针if(p) printheader(); printdata

13、(p); printf( 按任意键返回 !);getchar();elseNofind(); getchar();else if(select=2) /按姓名查询stringinput(searchinput,15, 请输入现有学生的姓名 :); p=Locate(l,searchinput,name);if(p) printheader(); printdata(p);printf( 按任意键返回 !); getchar();elseNofind(); getchar();elseWrong();getchar();/删除学生记录:先找到保存该学生记录的节点,然后删除该节点 void Del

14、(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,12, 请输入现有学生的学号 :); p=Locate(l,findmess,num);if(p)r=l;while(r-next!=p)r=r-next;r-n

15、ext=p-next; /将 p 所指节点从链表中去除free(p); /释放内存空间printf(n= 删除成功 !n);getchar(); saveflag=1;elseNofind();getchar();else if(sel=2) /先按姓名查询到该记录所在的节点stringinput(findmess,15, 请输入现有学生的姓名 ); p=Locate(l,findmess,name);if(p)r=l;while(r-next!=p)r=r-next;r-next=p-next;free(p); printf(n= 删除成功 !n); getchar();saveflag=1

16、;elseNofind(); getchar();elseWrong();getchar();/修改学生记录。先按输入的学号查询到该记录,然后提示用户修改学号之外的值,学号不 能修改void Modify(Link l)Node *p;char findmess20; if(!l-next)system(cls);printf(n= 无此学生记录 !n); getchar();return;system(cls);printf( 修改学生记录 !);Disp(l);stringinput(findmess,12, 请输入现有学生的学号 :); /输入并检验该学号/查询到该节点/ 若 p!=NU

17、LL, 表明已经找到该p=Locate(l,findmess,num);if(p)节点printf( 学号 :%s,n,p-data.num);printf( 姓名 :%s,p-data.name);stringinput(p-data.name,15, 输入新的姓名 :); printf( 计算机 :%d,p-data.cgrade);p-data.cgrade=numberinput( 计算机 0-100:); printf( 数学 :%d,p-data.mgrade);p-data.mgrade=numberinput( 数学 0-100:); printf( 英语 :%d,p-data

18、.egrade);p-data.egrade=numberinput( 英语 0-100:);p-data.total=p-data.egrade+p-data.cgrade+p-data.mgrade;p-data.ave=(float)(p-data.total/3);p-data.mingci=0;printf(n= 修改成功 !n);Disp(l);saveflag=1;elseNofind(); getchar();/插入记录 :按学号查询到要插入的节点的位置,然后在该学号之后插入一个新节点。 void Insert(Link l)Link p,v,newinfo; /p 指向插入位

19、置, newinfo 指新插入记录char ch,n um12,s12; s保存插入点位置之前的学号 ,n um保存输入的新记录的学号int flag=0;v=l-next; system(cls);Disp(l);while(1)stringinput(s,12, 按学号查询到要插入的节点的位置 :);flag=0;v=l-next;while(v) /查询该学号是否存在, flag=1 表示该学号存在 if(strcmp(v-data.num,s)=0) flag=1;break; v=v-next;if(flag=1)break; /若学号存在,则进行插入之前的新记录的输入操作elseg

20、etchar();printf(n= 学号 %s 存在,重试 ?(y/n):,s);scanf(%c,&ch);if(ch=y|ch=Y)continue;elsereturn;/以下新记录的输入操作与 Add() 相同 stringinput(num,12, 请输入新的学号 ! :); v=l-next;while(v)if(strcmp(v-data.num,num)=0) printf(=Sorry, 新学号 :%s 已存在 !n,num); printheader();printdata(v); printf(n); getchar(); return;v=v-next;newinfo

21、=(Node *)malloc(sizeof(Node);if(!newinfo)printf(n 内存申请失败 ! ); / 如没有申请到,打印提示信息 return ; / 返回主界面strcpy(newinfo-data.num,num); stringinput(newinfo-data.name,15, 姓名 :); newinfo-data.cgrade=numberinput( 计算机 0-100:); newinfo-data.mgrade=numberinput( 数学 0-100:); newinfo-data.egrade=numberinput( 英语 0-100:);

22、 newinfo-data.total=newinfo-data.egrade+newinfo-data.cgrade+newinfo-data.mgrade; newinfo-data.ave=(float)(newinfo-data.total/3);newinfo-data.mingci=0; newinfo-next=NULL;saveflag=1; / 在 main() 有对该全局变量的判断,若为 1,则进行存盘操作将指针赋值给 p,因为 l 中的头节点的下一个节点才实际保存着学生的记录p=l-next;while(1) if(strcmp(p-data.num,s)=0) / 在链

23、表中插入一个节点 newinfo-next=p-next; p-next=newinfo; break;p=p-next;Disp(l);printf(nn); getchar();void Tongji(Link l)Node *pm,*pe,*pc,*pt; /用于指向分数最高的节点Node *r=l-next;int countc=0,countm=0,counte=0; / 保存三门成绩中不及格的人数 fflush(stdin);if(!r)system(cls);printf(n= 无此学生记录 !n);getchar();return ;system(cls);Disp(l);pm

24、=pe=pc=pt=r;while(r)if(r-data.cgradedata.mgradedata.egradedata.cgrade=pc-data.cgrade) pc=r;if(r-data.mgrade=pm-data.mgrade) pm=r; if(r-data.egrade=pe-data.egrade) pe=r;if(r-data.total=pt-data.total) pt=r; r=r-next;printf(n 统计结果 n);printf(计算机 不及格:d (人)n,countc);printf(数学 不及格:%d (人)n”,countm);printf(英

25、语 不及格:%d (人)n”,counte);printf( n);printf( 总分最高分 姓名 :%s 分数为 :%dn,pt-data.name,pt-data.total);printf( 英语最高分 姓名 :%s 分数为 :%dn,pe-data.name,pe-data.egrade);printf( 数学最高分 姓名 :%s 分数为 :%dn,pm-data.name,pm-data.mgrade);printf( 计算机最高分 姓名 :%s 分数为 :%dn,pc-data.name,pc-data.cgrade);printf(nn 按任意键返回 !);getchar();/利用插入排序法实现单链表的按总分字段的降序排序,从高到低 void Sort(Link l)Link ll;ll=(Node*)malloc(sizeof(Node); if(!ll)printf(n 内存申请失败 ! ); return ; ll-

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1