学生信息管理系统C语言编程.doc_第1页
学生信息管理系统C语言编程.doc_第2页
学生信息管理系统C语言编程.doc_第3页
学生信息管理系统C语言编程.doc_第4页
学生信息管理系统C语言编程.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

学生信息管理系统C语言编程【问题描述】 学生信息的管理是每个学校必须具有的管理功能,主要是对学生的基本情况及学习成绩等方面的管理。该系统模拟一个简单的学生管理系统,要求对文件中所存储的学生数据进行各种常规操作,如:排序、查找、计算、显示等功能。通过此课题,熟练掌握文件、数组、结构体的各种操作,在程序设计中体现一定的算法思想,实现一个简单的学生信息管理系统。【基本要求】(1)学生信息包括:学生基本信息文件(student.txt)(注: 该文件不需要编程录入数据,可用文本编辑工具直接生成)的内容如下: (2)学生成绩基本信息文件(score.dat)及其内容如下:(注: 该文件内容需要编程录入数据,具体做法见下面的要求)学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩 综合成绩 实得学分(3)需要实现的功能1)数据录入和计算功能: 对score.dat进行数据录入,只录入每个学生的学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据, 综合成绩、实得学分由程序根据条件自动运算。 综合成绩的计算:如果本课程的实验成绩为-1,则表示无实验,综合成绩=平时成绩*30%+卷面成绩*70%;如果实验成绩不为-1,表示本课程有实验,综合成绩=平时成绩*15%+实验成绩*15%+卷面成绩*70% 。 实得学分的计算:采用等级学分制,综合成绩在90-100之间,应得学分=学分*100%;综合成绩在80-90之间,应得学分=学分*80%;综合成绩在70-80之间 ,应得学分=学分*75%; 综合成绩在60-70之间,应得学分=学分*60%;综合成绩在60以下 ,应得学分=学分*0%。2)查询功能:分为学生基本情况查询和成绩查询两种 (1)学生基本情况查询:、输入一个学号或姓名(可实现选择),查出此生的基本信息并显示输出,格式如下:、输入一个宿舍号码,可查询出本室所有的学生的基本信息并显示输出。(格式如上所示) (2)成绩查询:、 输入一个学号时,查询出此生的所有课程情况,格式如下: 学 号:xx 姓 名:xxxxx课程编号:xxx 课程名称:xxxxx 综合成绩:xxxx 实得学分: xx课程编号:xxx 课程名称:xxxxx 综合成绩:xxxx 实得学分: xx课程编号:xxx 课程名称:xxxxx 综合成绩:xxxx 实得学分: xx 共修:xx科,实得总学分为: xxx(3)删除功能:提供待删除学生的学号,则在student.txt和score.dat中删除所有与该学生有关的信息。(4)排序功能:能实现选择按综合成绩或实得学分升序或降序排序并显示数据。【程序设计的具体说明】(1) 将与两个文件对应的信息分别定义两种结构体类型来表示,也可以用类来定义;(2) 对score.dat文件的写入,从键盘上输入的是前七项,后两项数据项根据计算方法算出后,得到完整的结构体信息,作为一个整体写入(可调用write函数)。(3) 删除功能中可以将删除相关信息后得到的文件生成新文件存储,也可以在原文件的基础上作删除(4) 可以用面向过程方法或是面向对象的方法实现。(5) 主界面提供菜单选择的方法选择实现某一功能,一次运行程序能进行多次选择执行不同的功能。 #includestdio.h#includestdlib.h#includestring.h#define N 3typedef struct z1 char no11; char name15; int scoreN; float sum; float average; int order; struct z1 *next;STUDENT;STUDENT *init();STUDENT *create();STUDENT *del(STUDENT *h);void print(STUDENT *h);void search1(STUDENT *h);void search2(STUDENT *h);STUDENT *insert(STUDENT *h);void sort(STUDENT *h);void save(STUDENT *h);void tongji(STUDENT *h);int menu_select();STUDENT *load();void inputs(char *prompt,char *s,int count);STUDENT *load();main() int i; STUDENT *head; head=init(); for(;) switch(menu_select() case 0:head=init();break; case 1:head=create();break; case 2:head=insert(head);break; case 3:save(head);break; case 4:print(head);break; case 5:search1(head);break; case 6:head=del(head);break; case 7:sort(head);break; case 8:tongji(head);break; case 9:search2(head);break; case 10:exit(0); int menu_select() char *menu=*菜单*, 0. 初始化链表, 1. 输入学生成绩, 2. 插入学生成绩, 3. 保存学生记录, 4. 显示学生记录, 5. 按学号查找学生信息, 6. 删除指定学号的学生信息, 7. 按某一门课对学生成绩排序, 8. 统计某门课程的学生成绩, 9. 按姓名查找学生信息, 10. 退出系统; char s3; int c,i; for(i=0;i=11;i+) printf( %sn,menui); do printf(n请选择010中的某一个选项n); scanf(%s,s); c=atoi(s); while(c10); return c;STUDENT *init() return NULL;STUDENT *create() int i;int s; STUDENT *h=NULL,*info; for(;) info=(STUDENT *)malloc(sizeof(STUDENT); if(!info) printf(n内存不足); return NULL; inputs(输入学号:,info-no,11); if(info-no0=)break; inputs(输入姓名:,info-name,15); printf(开始输入%d门课的成绩n,N); s=0; for(i=0;iscorei); if(info-scorei100|info-scoreiscorei100|info-scoreiscorei; info-sum=s; info-average=(float)s/N; info-order=0; info-next=h; h=info; return h;void inputs(char *prompt,char *s,int count) char p255; do printf(prompt); scanf(%s,p); if(strlen(p)count) printf(n太长了!n); while(strlen(p)count); strcpy(s,p);void print(STUDENT *h) int i=0; STUDENT *p; p=h; printf(nnn*学生*n); printf(|序号|学号 | 姓名 | 语文 | 英语 |数学 | 总分 |平均分 |名次 |n); printf(|-|-|-|-|-|-|-|-|-|n); while(p!=NULL) i+; printf(|%3d |%-10s|%-8s|%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 *del(STUDENT *h) STUDENT *p,*q; char s11; printf(请输入要删除的学生的学号n); scanf(%s,s); q=p=h; while(strcmp(p-no,s)&p!=NULL) q=p; p=p-next; if(p=NULL) printf(n链表中没有学号为%s的学生n,s); else printf(nnn*找到了*n); printf(|学号 | 姓名 | 语文 | 英语 | 数学 | 总分 | 平均分 | 名次 |n); printf(|-|-|-|-|-|-|-|-|n); printf(|%-10s|%-8s|%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); printf(请按任意键删除n); getchar(); if(p=h) h=p-next; else q-next=p-next; free(p); printf(n已经删除学号为%s的学生n,s); printf(不要忘了保存数据n); return h;void search1(STUDENT *h) STUDENT *p; char s11; printf(请输入你要查找的同学的学号n); scanf(%s,s); p=h; while(strcmp(p-no,s)&p!=NULL) p=p-next; if(p=NULL) printf(n没有学号为%s的学生n,s); else printf(nnn*找到了*n); printf(|学号 | 姓名 | 语文 | 英语 | 数学 | 总分 | 平均分 | 名次 |n); printf(|-|-|-|-|-|-|-|-|n); printf(|%-10s|%-8s|%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); void search2(STUDENT *h) STUDENT *p; char s11; printf(请输入你要查找的同学的姓名n); scanf(%s,s); p=h; while(strcmp(p-name,s)&p!=NULL) p=p-next; if(p=NULL) printf(n没有姓名为%s的学生n,s); else printf(nnn*找到了*n); printf(|学号 | 姓名 | 语文 | 英语 | 数学 | 总分 | 平均分 | 名次 |n); printf(|-|-|-|-|-|-|-|-|n); printf(|%-10s|%-8s|%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; char s11; int s1,i; printf(请输入插入点的学生学号n); scanf(%s,s); printf(n请输入新的学生信息n); info=(STUDENT *)malloc(sizeof(STUDENT); if(!info) printf(n内存不足!); return NULL; inputs(输入学号:,info-no,11); inputs(输入姓名:,info-name,15); printf(请输入%d门课的分数n,N); s1=0; for(i=0;iscorei); if(info-scorei100|info-scoreiscorei100|info-scoreiscorei; info-sum=s1; info-average=(float)s1/N; info-order=0; info-next=NULL; p=h; q=h; while(strcmp(p-no,s)&p!=NULL) q=p;p=p-next; if(p=NULL) if(p=h) h=info; else q-next=info; else if(p=h) info-next=p; h=info; else info-next=p; q-next=info; printf(n已经插入了%s这个学生n,info-name); printf(-不要忘了存盘啊-n); return(h);void save(STUDENT *h) FILE *fp; STUDENT *p; char outfile10; printf(请输入保存文件的文件名,例如 c:f1te.txt:n); scanf(%s,outfile); if(fp=fopen(outfile,wb)=NULL) printf(不能打开文件n); exit(1); printf(n正在保存.n); p=h; while(p!=NULL) fwrite(p,sizeof(STUDENT),1,fp); p=p-next; fclose(fp

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论