收藏 分销(赏)

学生成绩标准管理系统C语言样本(共28页).docx

上传人:二*** 文档编号:4576804 上传时间:2024-09-30 格式:DOCX 页数:28 大小:88.45KB 下载积分:5 金币
下载 相关 举报
学生成绩标准管理系统C语言样本(共28页).docx_第1页
第1页 / 共28页
本文档共28页,全文阅读请下载到手机保存,查看更方便
资源描述
学生成绩标准管理系统C语言 /*创建*/ /*显示*/ /*排序*/ /*删除*/ /*查找 /*&new表示返 /*保存*/ /*读取*/ /*如菜单返回值为9 {switch(menu_select()) case l: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; 回地址*/case 7:save(head);break; case 8:head=load(); break;case 9:exit(0); 则程序结束*//*初始化函数*/ STUDENT *init()( return NULL;/*返回空指针*//*菜单选择函数*/ menu_select(){int n; struct date d;/*定义时间结构体*/getdate(&d);/*读取系统日期并把它放到结构体d 中*/printfC**按任意键进入主菜单”);/*按任意键进入主菜 单*/getch();/*从键盘读取一个字符,但不显示于屏幕*/ clrscr(); /*清屏*/ printf(H\n\t\t 学生成绩管理系统\n”); printf(H\n\t 制作者:潍坊科技学院07级计算机应用(4) .<2#^1# «2> ** . V V f , •»!•»!•<!•»!• »Tw »!• rjw rli<!• rlw <Tw r]^ »!• rjw »Tw »!• »!• rli <T»»!• rliejw rlw kJ**7#Ki*kJ*<y>*,,\**X*¥**¥***...****g**.,.*...**.,.*¥**.,.m ); printf(n\t\t 欢迎进入\n”); 班杨坤\n”);prjntf( "************************************* IV! ELl^U * * * *2>*2**2*\■ ,、输入学生成绩记录\n”); printf(n\t\t\t2. 显示学生成绩\n”);printf(M\t\t\t3. 排序\n”); printf(n\t\t\t4. 删除记录\n”); 按姓名查询成绩\n”);插入记录\n”); 退出\n”); . a*2**1* «1**2**1* *2* *• V V, V ■ * "<Jw •!*»J» »Jw<J»<Jw.川V ■ , \ /*显示当前系统日期 printf(n\t\t\t\t%d\\%d\\%d\nn„,);*/ do(printf(u\n\t\t\t 请选择项目(1~9):"); scanf(H%dH,&n);}while(n<l||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(H\n内存己满!”);/*输出内存溢出*/return (head);/*返回头指针,下同*/ )printf(”输入学号(按*输入结束); scanf(n%sM,p->num);if(p->num[O]==,*t) break;/*如果学号首字符为0则 结束输入*/printf(”输入姓名:”); scanf(M %sH,p->name);printf(n请输入成绩\n”);/*提示开始输入成绩*/ s=();/*计算每个学生的总分,初值为0*/ for(i=0;iv3;i++)/*3 门课程循环 3 次*/( do(printf(n 成绩 %d:n,i+l); scanf(H %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->sum=s; /*将总分保存*/ p->average=(float)s/3; 将s转换成float型,再求平均值*/ p->order=0; 0*/ p->next=head; 输入结点的后继结点*/ head=p; 新的头结点*/ } return(head); } /*显示全部记录函数*/ 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; p=head; /*初值为头指针*/ printf("\n********************************** 学 生 成 绩 表 **********************************、!,,)・printf(M \n”);printf(H|记录号|学号 | 姓名 | 语 文I英语I高数I总分I平均分I排名W);printf(M ");while(p!=NULL) (i++; printf(M| %d |%s|%sI %d | %d | %d | %d | %f I %d ", p->num,p->name,p->score[0],p->score[l],p->score[2],p->sum, p->average,p->order);p=p->next; )printf(M •?* •!• •?* •&•*?* *S**!• *?••?* *!• •?**?* *!•*!• •?* % t f X /*排序函数*/STUDENT *sort(STUDENT *head) {int i=0; STUDENT *pl产p2,*t,*temp; temp=head->next; 指的下一个结点作头指针*/ head->next=NULL; 表的头结点*/ while(temp!=NULL) 进行排序*/ ( t=temp; temp=temp->next; pl=head; 头指针开始*/ p2=head; pl的前驱,初值为头指针*/ /*保存名次*/ /*定义临时指针*/ /*将原表的头指针所 /*第一个结点为新 /*当原表不为空时, /*取原表的头结点*/ /*原表头结点指针后移*/ /*设定移动指针pl,从 /*设定移动指针p2做为 /*作成绩平均分比较*/p2=pl;/*待排序点值小,则新 表指针后移*/pl=pl->next; )if(pl==p2)/*pl==p2,说明待排序点值大, 应排在首位*/( t->next=pl;/*待排序点的后继为p*/head=t;/*新头结点为待排序点*/ }else/*待排序点应插入在中间某个位置p2 和pl之间,如p为空则是尾部*/( t->next=pl;/*t 的后继是 pl*/p2->next=t;/*p2 的后继是 t*/ }) pl=head;/*已排好序的头指针赋给pl,准备填写名次*/ /*结点序号*/ /*将结点序号赋值给名次*/ /*指针后移*/ /*排序成功*/ i++; pl->order=i; pl=pl->next;) printf(”排序成功\n”); return (head);) /*删除记录函数*/STUDENT *delete(STUDENT *head) (int n=0;STUDENT *pl,*p2;/*pl为查找到要删除的结点指针, p2为其前驱指针*/char c,s[6];/*s[6]用来存放学号,c用来输入字母*/ clrscr();printf(”请输入要删除的学生的学号:”); scanf(n%sM,s);pl=p2=head;/*给pl和p2赋初值头指针*/ vvhile(strcmp(pl->num,s) && pl != NULL)/*当记录的学号不是要找的,或指针不为空时*/ {p2=pl; pl的前驱指针*/ /*将pl指针值赋给p2作为 pl=pl->next; /*将pl指针指向下一条记 录*/ if(strcmp(pl->num,s)==O) /*学号找到了*/ f .』/ ,,^2**2**9*I** V ■ , • rjw ej« »jw rjw rj> »Jw rji rj»»|w rjw rj» rjw rjw rjwrjw rjwrjwrjw rjw 信息如下************************************\n”); printf(M \n”);printf(”| 学号 | 姓名 |语 文I英语I高数I总分I平均分I排名"); printf(M "); printf(H|%s|%s| %d | %d | %d | %d | %f | %d ", pl->num,pl->name,pl->score[0],pl->score[l],pl->score[2],pl ->sum,pl->average,pl->order); printf(H\nM); 一、设计目的 进一步加深、巩固学生所学专业课程(《C语言》)的基本 理论知识,理论联系实际,进一步培养学生综合分析问题和解 决问题的能力。掌握运用C语言独立地编写、调试应用程序和 进行其它相关设计的技能,充分发挥广大同学的潜力,使他们 通过本次课程设计而得到全面的锻炼。 二、系统分析 随着科学技术的不断发展,对人们的工作水平要求也越来 越高,然而计算机就成了帮助人们解决这个问题的工具,熟练 的运用计算机,它能为人们解决许多工作上的难题。对与一个 管理人员来说,快而迅速的了解各种信息是很关键的。使用计 算机在C语言环境下编写相关的管理系统就能达到对相关信 息的录入、显示;对记录的查询极其修改等目的。同时,这个 系统与*・*管理系统都有相似之处。基于同样的C语言环境, 对其提供的头文件*h (的不同组合,能为我们解决许许 多多的问题,因此,用它来编写成绩管理管理系统是可行的。 三、成绩管理系统主要功能 1. 输入记录 2. 用指定格式显示全部记录 3. 根据姓名查找记录 4. 根据姓名删除记录printf( printf( f fkJ* *{> «£«*$> *{> *2* *!* *£> <t* *{> «£>«£> —2* *1* <£> *1**2* *t* *?>*{> «£> *2** ■ ejw ♦[• riw rj— rj» ♦[•♦[• ej— rj» •;・ rj» ♦[• rjw rlw elw ♦[• erw rjw ♦[• »5w ♦[• rjw rjw ♦[•♦[• ♦卜 <iw rjw ♦[• rjw ♦卜♦;• rlw **************************************\n”). printf(”确定要删除吗? Y/N ?”);/*提示是否要删除, 输入Y删除,N则退出*/for(;;) (scanf(n%c,\&c);if(c==,n,||c==,N,) break;/*如果不删除,则 跳出本循环*/if(c==*yq|c==*Y') (if(pl==head)/*若 pl==head,说 明被删结点是首结点*/head=pl->next;/*把第二个结点地 址赋予head*/else p2->next=pl->next;/* 否则将一下结点 地址赋给前一结点地址*/n=n-l; printf(M\n 学号%s 已删除 \nM,s);printf(”请保存\nM);break;/*删除后就 跳出循环*/else /*找不到该结点 */ printf(H\n没有找到该生\nM); return(head); ) /*查找记录函数*/ void search(STUDENT *head) {STUDENT *p;/*移动指针*/ char s[5];/*存放姓名用的字符数组*/ clrscr(); printf(”请输入要查找的姓名\n”); scanf(H%sn,s); p=head; /*将头指针赋给p*/ vvhile(strcmp(p->name,s) && p != NULL)/*当记录的姓 名不是要找的,或指针不为空时*/p=p->next;/*移动指针,指向下一结点*/ if(p!=NULL)/*如果指针不为空*/ •&* «£• *T»<T*<T* *Tw ^Jw <T* ^7%<T*<T» <T»#T» <Tw<T» <Tw «£<**2* *2**3**!* <2* *2* —A *2* ■!*■!* ■?, *2* •!* «£<* *2* *2* •!* *2* »!**2* •!* *£<•*2* ■!* *2*t f \ “f r/ 不不不不不不不不不不不不不不不,F 不不不不不不不,F n*不不不不不不不不不、»*« • ■ I • printf(H W); printf(M| 学号 | 姓名 | 语文| 英语I高数|总分|平均分|排名"); printf(M \n”); printf(n|%s|%s| %d | %d | %d | %d | %f | %d ", p->num,p->name,p->score[0],p->score[l],p->score[2],p->sum, p->average,p->order); printf(M—- \n“); printf(M 5jC ?jc 5jC <jc ?jc ?^C?JC ?JC 5jC ?JC 5jC 5^C 5jC ?JC 结束 率**¥****亭*¥**¥*¥****¥********* 必*);else printf(n\n没有该学生\n”); /*显示没有该学 生*/ /*插入记录函数*/STUDENT*insert(STUDENT *head,STUDENT *new) (STUDENT *p0,*pl,*p2;int n=O,suml,i; pl=head;/*使pl指向第一个结点*/pO=new;/*pO指向要插入的结点*/ printf(n\n请输入一个新记录\nn);/*提示输入记录信息*/ printf(”输入学号:,scanf(M %sM,new->num); printf(”输入姓名:”); scanf(M %sM,new->name);printf(H请输入成绩\n”); suml=O;/*保存新记录的总分,初值为0*/for(i=0;iv3;i++) (do( printf(n 成绩 %d:n,i+l);scanf(H %dH,&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);suml=suml+new->score[i];/* 累加各门成绩 */} ne w->sum=sum 1;/*将总分存入新记录中*/new->average=(float)suml/3; new->order=0;if(head==NULL)/*原来的链表是空表*/ (head=pO;pO->next=NULL;} /*使 pO 指向的结 点作为头结点*/ else{vvhile((pO->average<pl->average)&&(pl->next!=NULL)) {p2=pl;/*使p2指向刚才pl指向的结点*/pl=pl->next; /*pl 后移一个结点*/ }if(p()->average>=pl->average) {if(head==pl)head=pO;/* 插到原来第一个结点之前*/ else p2->next=p0;/*插到 p2 指向的结点之后*/ pO->next=pl;}else (pl->next=pO;pO->next=NULL;} /* 插到最后的结点之后*/ n=n+l; /*结点数加1*/head=sort(head);/*调用排序的函数,将学生成绩重新排 序*/printf(n\n 学生%s 记录已插入\nH,new->name); printf(n 请保存 \n”);return(head); }/*保存数据到文件函数*/ void save(STUDENT *head){FILE *fp; STUDENT *p; {FILE *fp; STUDENT *p; /*定义指向文件的指针*/ /*定义移动指针*/ char outfile[10]; printf(n请输入要保存文件名称例如c:\\score\nH);scanf(H%sM,outfile); if((fp=fopen(outfile,nwbH))==NULL) /* 为输出打开一个二进制文件,为只写方式*/ (printf(”无法保存到文件!请检查路径是否正确!\n”); return;/*若打不开则返回菜单*/ )printf(M\n 正在保存\n”); p=head;/*移动指针从头指针开始*/ while(p!=NULL)/*如 p 不为空*/{ fwrite(p,LEN,l,fp);/* 写入一条记录 */p=p->next;/* 指针后移*/ )fclose(fp);/* 关闭文件*/ printf(”保存成功!\iT);} /*从文件读数据函数*/STUDENT *load() (STUDENT *pl,*p2,*head=NULL;/*定义记录指针变量*/ FILE*fp;/*定义指向文件的指针*/char infile[10]; printf(n请输入读取文件名称例如c:\\score\nM);scanf(H %sn,infile); if((fp=fopen(infile,nrbH))==NULL)/* 打开一个二进制文件,为只读方式*/ (printf(”打开失败!请检查路径是否正确!\"); return(head); }printf(n\n 正在打开!\n”); pl=(STUDENT *)malloc(LEN);/*开辟一个新单元*/if(!pl) (printf(”没有存储!\iT); return(head);head=pl; head=pl; /*申请到空间,将其作为头指针*/ while(!feof(fp)) while(!feof(fp)) /*循环读数据直到文件尾结束*/ if(fread(pl,LEN,l,fp)!=l) break; /*如果没读到数 据,跳出循环*/pl->next=(STUDENT *)malloc(LEN); /*为下一个 结点开辟空间*/if(!pl->next) (printf(”没有存储!"); return (head);} p2=pl;/*使p2指向刚才pl指向的结点*/pl=pl->next;/*指针后移,新读入数据链到当前表尾*/ }p2->next=NULL; /*最后一个结点的后继指针为空*/ fclose(fp);printf(M已成功读取!\n”); return (head);} 5. 保存记录到文件 6. 按序号显示记录 7. 按姓名由小到大的顺序排序四、系统框图 开始输出界面 选择操作4 Ah 4 Ah;4b -:/h:止 结束左冬"X /Ep右泠甘口 皿||咚退出系统 M耳诠挡n 坨时々i±r5Izl+Zn 六、界面设计 此系统界面采用图形和数字化菜单设计。 主界面设计如下: ****9« •£•*!• *f* **•**> *1* •?* ***al>•?*•?* <T*<T* <T**T* <Tw<T* #7w <T»^T* <7> <T»<T* ^Jw <T» <T^*T* <TW <T»<T» <T*<T*<T»<T* ^JW *T»<J* <T* <Tw <T»#7W <T*<T»<T*欢迎进入 学生成绩管理系统 •MENU 制作者:潍坊科技学院07级计算机应用(4)班 杨坤 •J* •?* *2^ ■,—•?« *1* ■,— •?**1* ■,— *•> •私 ■,— ••**2* <Jw <T* <g* <T* »i> <zw *T* ^7* <Tw <»w <Tw <7> <1* <7^ <7* <Tw »g* <T* <Jw <T* ^Jw «9» •[・... •., ♦[・•.• rj» »J» •.•・[・.[• •..,X. ・.・•[・•.. ・丫.•.• 1. 输入学生成绩记录 2. 显示学生成绩 3. 排序 4. 删除记录 5. 按姓名查询成绩 6. 插入记录 7. 保存 8. 读取 9. 退出六、用到的头文件及自定义的函数 1、头文件 #include <> #include<> #include<>/* 其它说明*/ #include<>/*字符串函数*/ #include<>/*内存操作函数*/ #include<>/*字符操作函数*/ #include<>/*动态地址分配函数*/ 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(); /*读文件函数*/ 有关函数的具体定义以及用法此处不再啰嗦,参看 F面的程序代码。 #include <> #include<>#include<> #include<> /*其它说明*/ #include<> /*字符串函数〃 #include<> /*内存操作函数*/ #include<> /*字符操作函数*/ #include<> /*动态地址分配函数*/ #deflne LEN sizeof(STUDENT)typedef struct stu/*定义结构体数组用于缓存数据*/ (char num[6];char name[10]; int score[3];int sum; float average;int order; struct stu *next;/*链表*/JSTUDENT; /*函数原型*/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(;;)/*循环无限次*/
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服