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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

C语言程序设计源程序学生成绩管理.docx

1、C语言程序设计源程序学生成绩管理/*11.3.2 源程序*/*xuesheng.c*/*头文件(.h)*/#include stdio.h /*I/O函数*/#include stdlib.h /*其它说明*/#include string.h /*字符串函数*/#include conio.h /*屏幕操作函数*/#include mem.h /*内存操作函数*/#include ctype.h /*字符操作函数*/#include alloc.h /*动态地址分配函数*/#define N 3 /*定义常数*/typedef struct z1 /*定义数据结构*/ char no11;

2、char name15; int scoreN; float sum; float average; int order; struct z1 *next; STUDENT;/*以下是函数原型*/STUDENT *init(); /*初始化函数*/STUDENT *create(); /*创建链表*/STUDENT *delete(STUDENT *h); /*删除记录*/void print(STUDENT *h); /* 显示所有记录*/void search(STUDENT *h); /*查找*/void save(STUDENT *h); /*保存*/STUDENT *load();

3、/*读入记录*/void computer(STUDENT *h); /*计算总分和均分*/STUDENT *insert(STUDENT *h); /*插入记录*/void append(); /*追加记录*/void copy(); /*复制文件*/STUDENT *sort(STUDENT *h); /*排序*/STUDENT *index(STUDENT *h); /*索引*/void total(STUDENT *h); /*分类合计*/int menu_select(); /*菜单函数*/*主函数开始*/main() int i; STUDENT *head; /*链表定义头指针*

4、/ head=init(); /*初始化链表*/ clrscr(); /*清屏*/ for(;) /*无限循环*/ switch(menu_select() /*调用主菜单函数,返回值整数作开关语句的条件*/ /*值不同,执行的函数不同,break 不能省略*/ case 0:head=init();break; /*执行初始化*/ case 1:head=create();break; /*创建链表*/ case 2:head=delete(head);break; /*删除记录*/ case 3:print(head);break; /*显示全部记录*/ case 4:search(hea

5、d);break; /*查找记录*/ case 5:save(head);break; /*保存文件*/ case 6:head=load(); break; /*读文件*/ case 7:computer(head);break; /*计算总分和均分*/ case 8:head=insert(head); break; /*插入记录*/ case 9:copy();break; /*复制文件*/ case 10:head=sort(head);break; /*排序*/ case 11:append();break; /*追加记录*/ case 12:head=index(head);bre

6、ak; /*索引*/ case 13:total(head);break; /*分类合计*/ case 14:exit(0); /*如菜单返回值为14程序结束*/ /*菜单函数,返回值为整数*/menu_select() char *menu=*MENU*, /*定义菜单字符串数组*/ 0. init list, /*初始化*/ 1. Enter list, /*输入记录*/ 2. Delete a record from list, /*从表中删除记录*/ 3. print list , /*显示单链表中所有记录*/ 4. Search record on name, /*按照姓名查找记录*

7、/ 5. Save the file, /*将单链表中记录保存到文件中*/ 6. Load the file, /*从文件中读入记录*/ 7. compute the score, /*计算所有学生的总分和均分*/ 8. insert record to list , /*插入记录到表中*/ 9. copy the file to new file, /*复制文件*/ 10. sort to make new file, /*排序*/ 11. append record to file, /*追加记录到文件中*/ 12. index on nomber, /*索引*/ 13. total on

8、 nomber, /*分类合计*/ 14. Quit; /*退出*/ char s3; /*以字符形式保存选择号*/ int c,i; /*定义整形变量*/ gotoxy(1,25); /*移动光标*/ printf(press any key enter menu.n); /*压任一键进入主菜单*/ getch(); /*输入任一键*/ clrscr(); /*清屏幕*/ gotoxy(1,1); /*移动光标*/ textcolor(YELLOW); /*设置文本显示颜色为黄色*/ textbackground(BLUE); /*设置背景颜色为蓝色*/ gotoxy(10,2); /*移动

9、光标*/ putch(0xc9); /*输出左上角边框*/ for(i=1;i44;i+) putch(0xcd); /*输出上边框水平线*/ putch(0xbb); /*输出右上角边框 */ for(i=3;i20;i+) gotoxy(10,i);putch(0xba); /*输出左垂直线*/ gotoxy(54,i);putch(0xba); /*输出右垂直线*/ gotoxy(10,20);putch(0xc8); /*输出左上角边框*/ for(i=1;i44;i+) putch(0xcd); /*输出下边框水平线*/ putch(0xbc); /*输出右下角边框*/ window

10、(11,3,53,19); /* 制作显示菜单的窗口,大小根据菜单条数设计*/ clrscr(); /*清屏*/ for(i=0;i16;i+) /*输出主菜单数组*/ gotoxy(10,i+1); cprintf(%s,menui); textbackground(BLACK); /*设置背景颜色为黑色*/ window(1,1,80,25); /*恢复原窗口大小*/ gotoxy(10,21); /*移动光标*/ do printf(n Enter you choice(014):); /*在菜单窗口外显示提示信息*/ scanf(%s,s); /*输入选择项*/ c=atoi(s);

11、/*将输入的字符串转化为整形数*/ while(c14); /*选择项不在014之间重输*/ return c; /*返回选择项,主程序根据该数调用相应的函数*/STUDENT *init() return NULL;/*创建链表*/STUDENT *create() int i; int s; STUDENT *h=NULL,*info; /* STUDENT指向结构体的指针*/ for(;) info=(STUDENT *)malloc(sizeof(STUDENT); /*申请空间*/ if(!info) /*如果指针info为空*/ printf(nout of memory); /*

12、输出内存溢出*/ return NULL; /*返回空指针*/ inputs(enter no:,info-no,11); /*输入学号并校验*/ if(info-no0=) break; /*如果学号首字符为则结束输入*/ inputs(enter name:,info-name,15); /*输入姓名,并进行校验*/ printf(please input %d score n,N); /*提示开始输入成绩*/ s=0; /*计算每个学生的总分,初值为0*/ for(i=0;iscorei); /*输入成绩*/ if(info-scorei100|info-scoreiscorei100|

13、info-scoreiscorei; /*累加各门课程成绩*/ info-sum=s; /*将总分保存*/ info-average=(float)s/N; /*求出平均值*/ info-order=0; /*未排序前此值为0*/ info-next=h; /*将头结点做为新输入结点的后继结点*/ h=info; /*新输入结点为新的头结点*/ return(h); /*返回头指针*/*输入字符串,并进行长度验证*/inputs(char *prompt, char *s, int count) char p255; do printf(prompt); /*显示提示信息*/ scanf(%s

14、,p); /*输入字符串*/ if(strlen(p)count)printf(n too long! n); /*进行长度校验,超过count值重输入*/ while(strlen(p)count); strcpy(s,p); /*将输入的字符串拷贝到字符串s中*/*输出链表中结点信息*/void print(STUDENT *h) int i=0; /* 统计记录条数*/ STUDENT *p; /*移动指针*/ clrscr(); /*清屏*/ p=h; /*初值为头指针*/ printf(nnn*STUDENT*n); printf(|rec|nO | name | sc1| sc2|

15、 sc3| sum | ave |order|n); printf(|-|-|-|-|-|-|-|-|-|n); while(p!=NULL) i+; printf(|%3d |%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |n, i, p-no,p-name,p-score0,p-score1,p-score2,p-sum,p-average,p-order); p=p-next; printf(*end*n);/*删除记录*/STUDENT *delete(STUDENT *h) STUDENT *p,*q; /*p为查找到要删除的结点指针,q为

16、其前驱指针*/ char s11; /*存放学号*/ clrscr(); /*清屏*/ printf(please deleted non); /*显示提示信息*/ scanf(%s,s); /*输入要删除记录的学号*/ q=p=h; /*给q和p赋初值头指针*/ while(strcmp(p-no,s)&p!=NULL) /*当记录的学号不是要找的,或指针不为空时*/ q=p; /*将p指针值赋给q作为p的前驱指针*/ p=p-next; /*将p指针指向下一条记录*/ if(p=NULL) /*如果p为空,说明链表中没有该结点*/ printf(nlist no %s studentn,s

17、); else /*p不为空,显示找到的记录信息*/ printf(*have found*n); printf(|no | name | sc1| sc2| sc3| sum | ave |order|n); printf(|-|-|-|-|-|-|-|-|n); printf(|%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |n, p-no, p-name,p-score0,p-score1,p-score2,p-sum, p-average,p-order); printf(*end*n); getch(); /*压任一键后,开始删除*/ if

18、(p=h) /*如果p=h,说明被删结点是头结点*/ h=p-next; /*修改头指针指向下一条记录*/ else q-next=p-next; /*不是头指针,将p的后继结点作为q的后继结点*/ free(p); /*释放p所指结点空间*/ printf(n have deleted No %s studentn,s); printf(Dont forget saven);/*提示删除后不要忘记保存文件*/ return(h); /*返回头指针*/*查找记录*/void search(STUDENT *h) STUDENT *p; /* 移动指针*/ char s15; /*存放姓名的字符

19、数组*/ clrscr(); /*清屏幕*/ printf(please enter name for searchn); scanf(%s,s); /*输入姓名*/ p=h; /*将头指针赋给p*/ while(strcmp(p-name,s)&p!=NULL) /*当记录的姓名不是要找的,或指针不为空时*/ p=p-next; /*移动指针,指向下一结点*/ if(p=NULL) /*如果指针为空*/ printf(nlist no %s studentn,s); /*显示没有该学生*/ else /*显示找到的记录信息*/ printf(nn*havefound*n); printf(|

20、nO | name | sc1| sc2| sc3| sum | ave |order|n); printf(|-|-|-|-|-|-|-|-|n); printf(|%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |n, p-no,p-name,p-score0,p-score1,p-score2,p-sum,p-average,p-order); printf(*end*n); /*插入记录*/STUDENT *insert(STUDENT *h) STUDENT *p,*q,*info; /*p指向插入位置,q是其前驱,info指新插入记录*/

21、char s11; /*保存插入点位置的学号*/ int s1,i; printf(please enter location before the non); scanf(%s,s); /*输入插入点学号*/ printf(nplease new recordn); /*提示输入记录信息*/ info=(STUDENT *)malloc(sizeof(STUDENT); /*申请空间*/ if(!info) printf(nout of memory); /*如没有申请到,内存溢出*/ return NULL; /*返回空指针*/ inputs(enter no:,info-no,11);

22、/*输入学号*/ inputs(enter name:,info-name,15); /*输入姓名*/ printf(please input %d score n,N); /*提示输入分数*/ s1=0; /*保存新记录的总分,初值为0*/ for(i=0;iscorei); if(info-scorei100|info-scoreiscorei100|info-scoreiscorei; /*计算总分*/ info-sum=s1; /*将总分存入新记录中*/ info-average=(float)s1/N; /*计算均分*/ info-order=0; /*名次赋值0*/ info-ne

23、xt=NULL; /*设后继指针为空*/ p=h; /*将指针赋值给p*/ q=h; /*将指针赋值给q*/ while(strcmp(p-no,s)&p!=NULL) /*查找插入位置*/ q=p; /*保存指针p,作为下一个p的前驱*/ p=p-next; /*将指针p后移*/ if(p=NULL) /*如果p指针为空,说明没有指定结点*/ if(p=h) /*同时p等于h,说明链表为空*/ h=info; /*新记录则为头结点*/ else q-next=info; /*p为空,但p不等于h,将新结点插在表尾*/ else if(p=h) /*p不为空,则找到了指定结点*/ info-n

24、ext=p; /*如果p等于h,则新结点插入在第一个结点之前*/ h=info; /*新结点为新的头结点*/ else info-next=p; /*不是头结点,则是中间某个位置,新结点的后继为p*/ q-next=info; /*新结点作为q的后继结点*/ printf(n -have inserted %s student-n,info-name); printf(-Dont forget save-n); /*提示存盘*/ return(h); /*返回头指针*/*保存数据到文件*/void save(STUDENT *h) FILE *fp; /*定义指向文件的指针*/ STUDENT

25、 *p; /* 定义移动指针*/ char outfile10; /*保存输出文件名*/ printf(Enter outfile name,for example c:f1te.txt:n); /*提示文件名格式信息*/ scanf(%s,outfile); if(fp=fopen(outfile,wb)=NULL) /*为输出打开一个二进制文件,如没有则建立*/ printf(can not open filen); exit(1); printf(nSaving file.n); /*打开文件,提示正在保存*/ p=h; /*移动指针从头指针开始*/ while(p!=NULL) /*如

26、p不为空*/ fwrite(p,sizeof(STUDENT),1,fp);/*写入一条记录*/ p=p-next; /*指针后移*/ fclose(fp); /*关闭文件*/ printf(-save success!-n); /*显示保存成功*/* 从文件读数据*/STUDENT *load() STUDENT *p,*q,*h=NULL; /*定义记录指针变量*/ FILE *fp; /* 定义指向文件的指针*/ char infile10; /*保存文件名*/ printf(Enter infile name,for example c:f1te.txt:n); scanf(%s,infile); /*输入文件名*/ if(fp=fopen(infile,rb)=NULL) /*打开一个二进制

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

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