学生成绩标准管理系统C语言.doc
《学生成绩标准管理系统C语言.doc》由会员分享,可在线阅读,更多相关《学生成绩标准管理系统C语言.doc(25页珍藏版)》请在咨信网上搜索。
一、 设计目标 深入加深、巩固学生所学专业课程(《C语言》)基础理论知识,理论联络实际,深入培养学生综合分析问题和处理问题能力。掌握利用C语言独立地编写、调试应用程序和进行其它相关设计技能,充足发挥广大同学潜力,使她们经过此次课程设计而得到全方面锻炼。 二、系统分析 伴随科学技术不停发展,对大家工作水平要求也越来越高,然而计算机就成了帮助大家处理这个问题工具,熟练利用计算机,它能为大家处理很多工作上难题。对和一个管理人员来说,快而快速了解多种信息是很关键。使用计算机在C语言环境下编写相关管理系统就能达成对相关信息录入、显示;对统计查询极其修改等目标。同时,这个系统和*-*管理系统全部有相同之处。基于一样C语言环境,对其提供头文件*h(stdio.h ,stdlib.h,string.h,malloc.h,mem.h,ctype.h,conio.h等)不一样组合,能为我们处理许很多多问题,所以,用它来编写成绩管理管理系统是可行。 三、成绩管理系统关键功效 1. 输入统计 2. 用指定格式显示全部统计 3. 依据姓名查找统计 4. 依据姓名删除统计 5. 保留统计到文件 6. 按序号显示统计 7. 按姓名由小到大次序排序 四、系统框图 主菜单 输入统计 排序 显示 保留 读取 删除 退出 查询 按姓名 按平均成绩 按学号 插入 按平均成绩高低 五、系统步骤图 开始 结束 选择操作 输入数据 排序 显示数据 查询 删除 输出界面 插入数据 退出系统 按学号 按姓名 保留数据吧 按景平均成绩 选择7 选择6 选择5 选择4 选择3 选择2 选择1 选择8 按平均成绩高低i 读取数据吧 选择8 三门成绩 学号 姓名 六、 界面设计 此系统界面采取图形和数字化菜单设计。 主界面设计以下: ********************************************************* 欢迎进入 学生成绩管理系统 制作者:潍坊科技学院07级计算机应用(4)班 杨坤 *********************** *MENU* ********************* 1. 输入学生成绩统计 2. 显示学生成绩 3. 排序 4. 删除统计 5. 按姓名查询成绩 6. 插入统计 7. 保留 8. 读取 9. 退出 六、用到头文件及自定义函数 1、头文件 #include <stdio.h> #include<dos.h> #include<stdlib.h> /*其它说明*/ #include<string.h> /*字符串函数*/ #include<mem.h> /*内存操作函数*/ #include<ctype.h> /*字符操作函数*/ #include<alloc.h> /*动态地址分配函数*/ 2、自定义功效函数 TUDENT *init(); /*初始化函数*/ int menu_select(); /*菜单函数*/ STUDENT *create(); /*创建链表*/ void print(STUDENT *head); /* 显示全部统计函数*/ void search(STUDENT *head); /*查找统计函数*/ STUDENT *delete(STUDENT *head); /*删除统计函数*/ STUDENT *sort(STUDENT *head); /*排序函数*/ STUDENT *insert(STUDENT *head,STUDENT *new); /*插入统计函数*/ void save(STUDENT *head); /*保留文件函数*/ STUDENT *load(); /*读文件函数*/ 相关函数具体定义和使用方法此处不再烦琐,参看下面程序代码。 七、程序代码 #include <stdio.h> #include<dos.h> #include<stdlib.h> /*其它说明*/ #include<string.h> /*字符串函数*/ #include<mem.h> /*内存操作函数*/ #include<ctype.h> /*字符操作函数*/ #include<alloc.h> /*动态地址分配函数*/ #define LEN sizeof(STUDENT) typedef struct stu /*定义结构体数组用于缓存数据*/ {char num[6]; char name[10]; int score[3]; int sum; float average; int order; struct stu *next; /*链表*/ }STUDENT; /*函数原型*/ STUDENT *init(); /*初始化函数*/ int menu_select(); /*菜单函数*/ STUDENT *create(); /*创建链表*/ void print(STUDENT *head); /* 显示全部统计函数*/ void search(STUDENT *head); /*查找统计函数*/ STUDENT *delete(STUDENT *head); /*删除统计函数*/ STUDENT *sort(STUDENT *head); /*排序函数*/ STUDENT *insert(STUDENT *head,STUDENT *new); /*插入统计函数*/ void save(STUDENT *head); /*保留文件函数*/ STUDENT *load(); /*读文件函数*/ /*主函数界面*/ void main() {STUDENT *head,new; head=init(); /*链表初始化,使head值为NULL*/ for(;;) /*循环无限次*/ {switch(menu_select()) { case 1:head=create();break; /*创建*/ case 2:print(head);break; /*显示*/ case 3:head=sort(head);break; /*排序*/ case 4:head=delete(head);break; /*删除*/ case 5:search(head);break; /*查找*/case 6:head=insert(head,&new);break; /*&new表示返回地址*/ case 7:save(head);break; /*保留*/ case 8:head=load(); break; /*读取*/ case 9:exit(0); /*如菜单返回值为9则程序结束*/ } } } /*初始化函数*/ STUDENT *init() { return NULL; /*返回空指针*/ } /*菜单选择函数*/ menu_select() {int n; struct date d; /*定义时间结构体*/ getdate(&d); /*读取系统日期并把它放到结构体d中*/ printf("按任意键进入主菜单"); /*按任意键进入主菜单*/ getch(); /*从键盘读取一个字符,但不显示于屏幕*/ clrscr(); /*清屏*/ printf("********************************************************************************\n"); printf("\t\t 欢迎进入\n"); printf("\n\t\t 学生成绩管理系统\n"); printf("\n\t 制作者: 潍坊科技学院07级计算机应用(4)班 杨坤\n"); printf("*************************************MENU***************************************\n"); printf("\t\t\t1. 输入学生成绩统计\n"); printf("\t\t\t2. 显示学生成绩\n"); printf("\t\t\t3. 排序\n"); printf("\t\t\t4. 删除统计\n"); printf("\t\t\t5. 按姓名查询成绩\n"); printf("\t\t\t6. 插入统计\n"); printf("\t\t\t7. 保留\n"); printf("\t\t\t8. 读取\n"); printf("\t\t\t9. 退出\n"); printf("********************************************************************************\n"); printf("\t\t\t\t%d\\%d\\%d\n",d.da_year,d.da_mon,d.da_day); /*显示目前系统日期*/ do{ printf("\n\t\t\t请选择项目(1~9):"); scanf("%d",&n); }while(n<1||n>9); /*假如选择项不在1~9之间则重输*/ return(n); /*返回选择项,主函数依据该数调用对应函数*/ } /*输入函数*/ STUDENT *create() {int i,s; STUDENT *head=NULL,*p; /* 定义函数.此函数带回一个指向链表头指针*/ clrscr(); for(;;) {p=(STUDENT *)malloc(LEN); /*开辟一个新单元*/ if(!p) /*假如指针p为空*/ {printf("\n内存已满!"); /*输出内存溢出*/ return (head); /*返回头指针,下同*/ } printf("输入学号(按'*'输入结束):"); scanf("%s",p->num); if(p->num[0]=='*') break; /*假如学号首字符为0则结束输入*/ printf("输入姓名:"); scanf("%s",p->name); printf(" 请输入成绩\n"); /*提醒开始输入成绩*/ s=0; /*计算每个学生总分,初值为0*/ for(i=0;i<3;i++) /*3门课程循环3次*/ { do{ printf("成绩%d:",i+1); scanf("%d",&p->score[i]); if(p->score[i]<0 || p->score[i]>100) /*确保成绩在0~100之间*/ printf("请输入0~100之间数\n"); }while(p->score[i]<0 || p->score[i]>100); s=s+p->score[i]; /*累加各门成绩*/ } p->sum=s; /*将总分保留*/ p->average=(float)s/3; /*先用强制类型转换将s转换成float型,再求平均值*/ p->order=0; /*未排序前此值为0*/ p->next=head; /*将头结点做为新输入结点后继结点*/ head=p; /*新输入结点为新头结点*/ } return(head); } /* 显示全部统计函数*/ void print(STUDENT *head) {int i=0; /* 统计统计条数*/ STUDENT *p; /*移动指针*/ clrscr(); p=head; /*初值为头指针*/ printf("\n**********************************学生成绩表**********************************\n"); printf("-------------------------------------------------------------------------------\n"); printf("|统计号| 学号 | 姓名 | 语文 | 英语 | 高数 | 总分 | 平均分 | 排名 |\n"); printf("-------------------------------------------------------------------------------\n"); while(p!=NULL) { i++; printf("| %d | %s | %s | %d | %d | %d | %d | %f | %d |\n", i, p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order); p=p->next; } printf("-------------------------------------------------------------------------------\n"); printf("**************************************结束**************************************\n"); } /*排序函数*/ STUDENT *sort(STUDENT *head) {int i=0; /*保留名次*/ STUDENT *p1,*p2,*t,*temp; /*定义临时指针*/ temp=head->next; /*将原表头指针所指下一个结点作头指针*/ head->next=NULL; /*第一个结点为新表头结点*/ while(temp!=NULL) /*当原表不为空时,进行排序*/ { t=temp; /*取原表头结点*/ temp=temp->next; /*原表头结点指针后移*/ p1=head; /*设定移动指针p1,从头指针开始*/ p2=head; /*设定移动指针p2做为p1前驱,初值为头指针*/ while(t->average<p1->average&&p1!=NULL) /*作成绩平均分比较*/ { p2=p1; /*待排序点值小,则新表指针后移*/ p1=p1->next; } if(p1==p2) /*p1==p2,说明待排序点值大,应排在首位*/ { t->next=p1; /*待排序点后继为p*/ head=t; /*新头结点为待排序点*/ } else /*待排序点应插入在中间某个位置p2和p1之间,如p为空则是尾部*/ { t->next=p1; /*t后继是p1*/ p2->next=t; /*p2后继是t*/ } } p1=head; /*已排好序头指针赋给p1,准备填写名次*/ while(p1!=NULL) /*当p1不为空时,进行下列操作*/ { i++; /*结点序号*/ p1->order=i; /*将结点序号赋值给名次*/ p1=p1->next; /*指针后移*/ } printf("排序成功\n"); /*排序成功*/ return (head); } /*删除统计函数*/ STUDENT *delete(STUDENT *head) {int n=0; STUDENT *p1,*p2; /*p1为查找到要删除结点指针,p2为其前驱指针*/ char c,s[6]; /*s[6]用来存放学号,c用来输入字母*/ clrscr(); printf("请输入要删除学生学号: "); scanf("%s",s); p1=p2=head; /*给p1和p2赋初值头指针*/ while(strcmp(p1->num,s) && p1 != NULL) /*当统计学号不是要找,或指针不为空时*/ {p2=p1; /*将p1指针值赋给p2作为p1前驱指针*/ p1=p1->next; /*将p1指针指向下一条统计*/ } if(strcmp(p1->num,s)==0) /*学号找到了*/ {printf("**************************************信息以下************************************\n"); printf("-------------------------------------------------------------------------------\n"); printf("| 学号 | 姓名 | 语文| 英语 | 高数 | 总分 | 平均分 | 排名 |\n"); printf("-------------------------------------------------------------------------------\n"); printf("| %s | %s | %d | %d | %d | %d | %f | %d |\n", p1->num,p1->name,p1->score[0],p1->score[1],p1->score[2],p1->sum,p1->average,p1->order); printf("-------------------------------------------------------------------------------\n"); printf("***************************************结束**************************************\n"); printf("确定要删除吗? Y/N ?"); /*提醒是否要删除,输入Y删除,N则退出*/ for(;;) {scanf("%c",&c); if(c=='n'||c=='N') break; /*假如不删除,则跳出本循环*/ if(c=='y'||c=='Y') { if(p1==head) /*若p1==head,说明被删结点是首结点*/ head=p1->next; /*把第二个结点地址给予head*/ else p2->next=p1->next; /*不然将一下结点地址赋给前一结点地址*/ n=n-1; printf("\n学号%s已删除 \n",s); printf("请保留\n");break; /*删除后就跳出循环*/ } } } else printf("\n没有找到该生\n"); /*找不到该结点*/ return(head); } /*查找统计函数*/ void search(STUDENT *head) {STUDENT *p; /* 移动指针*/ char s[5]; /*存放姓名用字符数组*/ clrscr(); printf("请输入要查找姓名\n"); scanf("%s",s); p=head; /*将头指针赋给p*/ while(strcmp(p->name,s) && p != NULL) /*当统计姓名不是要找,或指针不为空时*/ p=p->next; /*移动指针,指向下一结点*/ if(p!=NULL) /*假如指针不为空*/ {printf("\n*************************************查找************************************\n"); printf("-------------------------------------------------------------------------------\n"); printf("| 学号 | 姓名 | 语文 | 英语 | 高数 | 总分 | 平均分 | 排名 |\n"); printf("-------------------------------------------------------------------------------\n"); printf("| %s | %s | %d | %d | %d | %d | %f | %d |\n", p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order); printf("-------------------------------------------------------------------------------\n"); printf("***************************************结束**************************************\n"); } else printf("\n没有该学生\n"); /*显示没有该学生*/ } /*插入统计函数*/ STUDENT *insert(STUDENT *head,STUDENT *new) {STUDENT *p0,*p1,*p2; int n=0,sum1,i; p1=head; /*使p1指向第一个结点*/ p0=new; /*p0指向要插入结点*/ printf("\n请输入一个新统计\n"); /*提醒输入统计信息*/ printf("输入学号:"); scanf("%s",new->num); printf("输入姓名:"); scanf("%s",new->name); printf("请输入成绩\n"); sum1=0; /*保留新统计总分,初值为0*/ for(i=0;i<3;i++) { do{ printf("成绩%d:",i+1); scanf("%d",&new->score[i]); if(new->score[i]>100||new->score[i]<0) printf("请输入0~100之间数\n"); }while(new->score[i]>100||new->score[i]<0); sum1=sum1+new->score[i]; /*累加各门成绩*/ } new->sum=sum1; /*将总分存入新统计中*/ new->average=(float)sum1/3; new->order=0; if(head==NULL) /*原来链表是空表*/ {head=p0;p0->next=NULL;} /*使p0指向结点作为头结点*/ else {while((p0->average<p1->average)&&(p1->next!=NULL)) {p2=p1; /*使p2指向刚才p1指向结点*/ p1=p1->next; /*p1后移一个结点*/ } if(p0->average>=p1->average) {if(head==p1)head=p0; /*插到原来第一个结点之前*/ else p2->next=p0; /*插到p2指向结点以后*/ p0->next=p1;} else {p1->next=p0;p0->next=NULL;} /*插到最终结点以后*/ } n=n+1; /*结点数加1*/ head=sort(head); /*调用排序函数,将学生成绩重新排序*/ printf("\n学生%s统计已插入\n",new->name); printf("请保留\n"); return(head); } /*保留数据到文件函数*/ void save(STUDENT *head) {FILE *fp; /*定义指向文件指针*/ STUDENT *p; /* 定义移动指针*/ char outfile[10]; printf("请输入要保留文件名称 比如c:\\score\n"); scanf("%s",outfile); if((fp=fopen(outfile,"wb"))==NULL) /*为输出打开一个二进制文件,为只写方法*/ { printf("无法保留到文件!请检验路径是否正确!\n"); return; /*若打不开则返回菜单*/ } printf("\n正在保留\n"); p=head; /*移动指针从头指针开始*/ while(p!=NULL) /*如p不为空*/ { fwrite(p,LEN,1,fp); /*写入一条统计*/ p=p->next; /*指针后移*/ } fclose(fp); /*关闭文件*/ printf("保留成功!\n"); } /* 从文件读数据函数*/ STUDENT *load() {STUDENT *p1,*p2,*head=NULL; /*定义统计指针变量*/ FILE *fp; /* 定义指向文件指针*/ char infile[10]; printf("请输入读取文件名称 比如 c:\\score\n"); scanf("%s",infile); if((fp=fopen(infile,"rb"))==NULL) /*打开一个二进制文件,为只读方法*/ { printf("打开失败!请检验路径是否正确!\n"); return(head); } printf("\n正在打开!\n"); p1=(STUDENT *)malloc(LEN); /*开辟一个新单元*/ if(!p1) { printf("没有存放!\n"); return(head); } head=p1; /*申请到空间,将其作为头指针*/ while(!feof(fp)) /*循环读数据直到文件尾结束*/ { if(fread(p1,LEN,1,fp)!=1) break; /*假如没读到数据,跳出循环*/ p1->next=(STUDENT *)malloc(LEN); /*为下一个结点开辟空间*/ if(!p1->next) { printf("没有存放!\n"); return (head); } p2=p1; /*使p2指向刚才p1指向结点*/ p1=p1->next; /*指针后移,新读入数据链到目前表尾*/ } p2->next=NULL; /*最终一个结点后继指针为空*/ fclose(fp); printf("已成功读取!\n"); return (head); }- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 成绩 标准 管理 系统 语言
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文