




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#include /标准输入输出#include /内存分配#include #include /*#说明#2014.12.28修改内容:修改了大量bug,加入了姓名项 v1.6简单学生管理系统 蔚蓝之链编写 本人是C语言初学者,初学C语言没几个月,程序写的很笨,不喜勿喷_ vc+6.0编译无error,无warning已实现功能:添加学生,列出学生信息列表,删除学生,退出,学号重复检查,排序功能,多科成绩录入(求平均成绩,及总平均成绩),保存记录,读取记录,修改功能;待实现功能:查询.2014.12.1创建文件,开始编写,增加添加学生函数,增加列出学生函数,增加删除学生函数,退出 版本1.02014.12.2修改内容:增加学号重复检查函数,修复显示内容时程序终止,输出列表函数优化,添加学生函数优化 1.12014.12.32014.12.4修改内容:增加排序函数,删除函数内部优化,main函数内部改动,添加学生函数优化 1.22014.12.52014.12.7修改内容:增加多科目录入,添加函数优化,新增总成绩与平均成绩显示,排序函数优化,输出函数改动 1.3,更新到此告一段落,继续学习去(_)2014.12.92014.12.13修改内容:新增保存函数,读取函数,主程序修改,新增链表清除函数1.42014.12.14修改内容:新增修改函数,新增宏定义MAX_SCORE and MAX_SNO,方便程序的修改,修改程序中所有warning,一些bug修正1.5*/常量定义区+#define bool int /由于C语言中不存在bool型,所以这里把它定义成int型#define true 1 /同上#define false 0 /#define LEN sizeof(struct ryb) /动态内存分配空间大小#define DATAFILE DATAFILE.WL/数据保存文件名#define MAX_SCORE 150 /最高分数上限值#define MAX_SNO 200 /最多录入学生上限值,即能输入的最大学号数/END常量定义=/声明函数=struct ryb * del_item_ryb (struct ryb * head,int sno,int * del_message);/删除指定学号节点(链表头,欲删除学号,处理结果(1为删除成功,0为删除失败),返回删除后的链表头struct ryb * create_item_ryb (struct ryb * head);/向指定的链表添加学生,并返回链表头void put_ryb (struct ryb * head);/输出学号及成绩(欲输出链表头)bool is_sno(struct ryb * head, int sno );/判断指定学号是否存在,如存在返回true,不存在返回false(链表头,欲判断学号)struct ryb * order(struct ryb * head, enum ordertype type, int fs );/排序函数;(链表头,排序方式(asc或desc),排序类型(1为按学号,2为按总成绩)bool save_data(struct ryb * head);/保存链表数据函数(欲保存链表头)struct ryb * read_data(void);/读取数据到链表,并返回链表头void clear(struct ryb * head);/清除函数,清除指定链表所有数据,释放内存空间void amend_ryb(struct ryb * head, int sno);/修改函数,修改指定学号学生成绩信息(链表头,要修改成绩的学生学号)struct ryb /定义链表数据结构int sno; /学号char name9; /姓名int chinese; /语文int math; /数学int english; /英语int clanguage; /C语言int tiyu; /体育int score; /总成绩struct ryb *next;enum ordertype/定义排序枚举类型asc,desc;/性感的分割线$主程序$int main ( void )struct ryb * head,* temp_h;/链表头,临时链表bool exit = false;short int value;/接受输入信息1,2,3,4 1表示添加信息,2显示信息,3删除信息,4排序,5退出int sno, del_message = 0;/学号,删除函数处理结果(1为删除成功,0为删除失败)int pxfs,pxlx;/排序方式,排序类型(方式ascdesc);(类型 1学号,2成绩)char is_quit;/表示是否退出,y或Y表示退出,否则不退出char is_save;/表示是否保存数据,y或Y表示保存,否则不保存char is_read;/表示是否读取数据,y或Y表示读取,否则不读取bool ssave;/表示是否保存成功,true表示成功,false表示保存失败int amend_sno; /表示要修改的学号head = (struct ryb *) malloc(LEN);/创建初始链表head-sno =0;/链表赋初值head-next = NULL;doprintf(蔚蓝学生管理系统v1.6(C语言版) nn);printf(添加学生n显示成绩列表n删除学生n排序n保存数据n读取数据n修改n退出系统nn);printf(等待命令输入:);fflush(stdin);/清空键盘缓冲区scanf(%d,&value);if(value = 1)/添加head = create_item_ryb(head);/添加信息printf(录入信息结束!n);system(pause);else if (value = 2)/显示put_ryb(head); /显示信息system(pause);else if(value = 3)/删除printf(请输入要删除的学生学号:);fflush(stdin);/清空键盘缓冲区scanf(%d,&sno);head = del_item_ryb(head,sno, &del_message);/删除if(del_message = 1)printf(删除成功!n);elseprintf(删除失败!n);system (pause);else if(value = 4)/排序r:printf (请请输入排序方式(1升序,2降序):);fflush(stdin);scanf(%d,&pxfs);printf (请输入排序类型(1按学号,2按成绩):);fflush(stdin);scanf(%d,&pxlx);if (pxfs 2 | pxfs 2 | pxlx 0 & amend_sno sno=sno)if(p = head)/如果第一个为要删除的值head = head-next;/修改链表头/printf(已成功修改头指针sno=%dn,head-sno);elsep1-next = p-next;/将链表节点指向要删除的链表节点的下一节点free(p);/释放已删除的链表节点内存*message = 1;break; p1 = p;/保存当前链表节点p = p-next;if(p-next=NULL & p-math = 0 & p-math next & p-math = 0 & p-math next != NULL)/寻找链表尾,找到后将p1指向链表尾以接受学生信息的添加p1 = p1-next;i+;do p1-sno = 0;sno:printf(请输入学生%d学号与姓名格式:学号,姓名:,i);fflush(stdin);/清空键盘缓冲区if(scanf(%d,%s,&tempsno,&tempname) = 2);else printf (输入格式错误!请重新输入T_Tn);system(pause);goto sno;if(tempsno != 0)if (is_sno(head,tempsno) = false)/判断学号是否存在p1-sno = tempsno;else printf (学号%d已存在!n,tempsno);goto sno;elsecontinue;printf(-n);printf(请输入学生%d成绩(语文,数学,英语,C语言,体育,以逗号分隔):,i);for(n=0;nsno = 0);else if(p1-sno sno MAX_SNO)/判断学号是否合法,(1200)printf(学号输入不合法,学号为1-%d之间的数包括(1,%d)!n,MAX_SNO,MAX_SNO);system(pause);continue;else/判断成绩合法性for(n=0;n=4;n+)/检测成绩录入合法性if (scorearrnMAX_SCORE)printf(成绩输入不合法或成绩数值输入错误,各科成绩应为0-%d之间的数包括(0,%d)!n,MAX_SCORE,MAX_SCORE);system(pause);continue;p1-sno = tempsno;p1-chinese = scorearr0;p1-math = scorearr1;p1-english = scorearr2;p1-clanguage = scorearr3;p1-tiyu = scorearr4;strcpy(p1-name ,tempname);/求总成绩p1-score=scorearr0+scorearr1+scorearr2+scorearr3+scorearr4;if(p1-sno != 0)p1-next = (struct ryb *) malloc(LEN);/create一个新节点给p1-nextp1 = p1-next;/将新节点地址给p1p1-next = NULL;/elsep1-sno = 0;i+;while (p1-sno != 0);/判断学号是否为0;为0退出添加return head;#if(1)void put_ryb (struct ryb * head)/输出学号及成绩(欲输出链表头)struct ryb *pryb = head;struct ryb zcj;/总成绩int student_num = 0;/学生人数/初始化总成绩结构体zcj.chinese = 0;zcj.clanguage = 0;zcj.english = 0;zcj.math = 0;zcj.tiyu = 0;/初始化ENDsystem(cls);printf ( -n);printf (|某班学生成绩表|n);printf ( -n);printf ( - - - - - - - - -n);printf (|学号| |姓名| |语文| |数学| |英语| |C语言| |体育| |总成绩| |平均成绩|n);printf ( - - - - - - - - -n);/8,8,8,8,9,8,10,12doif(pryb-sno != 0 & pryb-math = 0 & pryb-math sno,pryb-name ,pryb-chinese,pryb-math, pryb-english,pryb-clanguage,pryb-tiyu,pryb-score, pryb-score / 5);zcj.chinese = zcj.chinese + pryb-chinese ;/计算各科总成绩zcj.clanguage = zcj.clanguage + pryb-clanguage ;zcj.english = zcj.english + pryb-english ;zcj.math = zcj.math + pryb-math ;zcj.tiyu = zcj.tiyu + pryb-tiyu ;student_num+;/记录总学生人数,表示链表不为空:pryb=pryb-next;while(pryb-next & pryb-math = 0 & pryb-math = 1)/判断链表是否为空printf (nn总平均成绩:(语文:%d,数学:%d,英语:%d,C语言:%d,体育:%d)n,zcj.chinese/student_num, zcj.math / student_num,zcj.english / student_num, zcj.clanguage / student_num , zcj.tiyu / student_num);/输出总平均成绩elseprintf (没有可以输出列表!nn);#endifbool is_sno(struct ryb * head,int sno)/判断学号是否存在(头指针,学号),如学号存在返回true,不存在返回falsestruct ryb * p;p=head;do if(p-sno = sno)return true;if (p-next != NULL)p = p-next;while(p-next!=NULL);return false;/排序函数 排序使用冒泡算法struct ryb * order(struct ryb * head, enum ordertype type, int fs )/排序函数;(链表头,排序方式(asc或desc),排序类型(1为按学号,2为按总成绩)struct ryb *p,*rp,*ptemp,*rph;/要排序的链表,要返回的链表,临时排序链表,要返回的链表头int max,min;int pro_mess;/删除函数处理结果1,0 if (head-sno = 0)return head;p = head;max = 0, min = 0;rp = (struct ryb *) malloc(LEN);/create一个新节点给rprph = rp;doptemp = p;if(fs = 1)/按学号max = ptemp-sno;/赋初值min = ptemp-sno;else /按成绩max = ptemp-sno;min = ptemp-score;max = ptemp-score;rp-sno = ptemp-sno ;rp-score =ptemp-score ;rp-tiyu = ptemp-tiyu ;rp-english = ptemp-english ;rp-chinese = ptemp-chinese ;rp-math = ptemp-math ;rp-clanguage = ptemp-clanguage ;strcpy(rp-name , ptemp-name) ;doif(type = desc)/降序if(fs = 1)/按学号if(ptemp-sno max)max = ptemp-sno;rp-sno = ptemp-sno ;rp-score =ptemp-score ;rp-tiyu = ptemp-tiyu ;rp-english = ptemp-english ;rp-chinese = ptemp-chinese ;rp-math = ptemp-math ;rp-clanguage = ptemp-clanguage ;strcpy(rp-name , ptemp-name) ;else if (fs = 2)/按成绩if(ptemp-score max)max = ptemp-score;rp-sno = ptemp-sno ;rp-score = ptemp-score ;rp-tiyu = ptemp-tiyu ;rp-english = ptemp-english ;rp-chinese = ptemp-chinese ;rp-math = ptemp-math ;rp-clanguage = ptemp-clanguage ;strcpy(rp-name , ptemp-name) ;if(type = asc)/升序if(fs = 1)/按学号if(ptemp-sno sno;rp-sno = ptemp-sno ;rp-score = ptemp-score ;rp-tiyu = ptemp-tiyu ;rp-english = ptemp-english ;rp-chinese = ptemp-chinese ;rp-math = ptemp-math ;rp-clanguage = ptemp-clanguage ;strcpy(rp-name , ptemp-name) ;else if (fs = 2)/按成绩if(ptemp-score score;rp-sno = ptemp-sno ;rp-score = ptemp-score ;rp-tiyu = ptemp-tiyu ;rp-english = ptemp-english ;rp-chinese = ptemp-chinese ;rp-math = ptemp-math ;rp-clanguage = ptemp-clanguage ;strcpy(rp-name , ptemp-name) ; ptemp= ptemp-next ;while(ptemp-next != NULL); p=del_item_ryb(p,rp-sno, &pro_mess);rp-next = (struct ryb *) malloc(LEN);/create一个新节点给rp-nextrp = rp-next ;if(p-next = NULL)/添加链表尾信息 链表尾为一个指向NULL的空结构,以表示链表结束rp-score = 0;rp-sno = 0;rp-next = NULL;while(p-next != NULL);return rph;/返回排序后链表头/排序函数END;-bool save_data(struct ryb * head)/保存链表数据函数(欲保存链表头),成功返回true,失败返回falseFILE * fp;struct ryb * p;p = head;if (head-sno = 0)/如果链表为空return false;/返回falsefp = fopen(DATAFILE, wb+);/打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。rewind(fp);/指向文件头doif (p-sno != 0)fwrite(p,LEN,1,fp);/保存结构体p = p-next;/while(p-sno != 0);fclose(fp);/关闭文件return true;/savedata_END-struct ryb * read_data(void)/读取数据到链表,并返回链表头,失败返回 NULLFILE * fp;struct ryb *head, *p;head = (struct ryb *) malloc(LEN);/创建初始链表p = head;fp = fopen(DATAFILE, r);/以只读方式打开文件if(fp = NULL)/判断文件是否打开失败fclose(fp);return NULL; while(1) if(feof(fp) = 0)fread(p,LEN,1,fp) ;if (p-math = 0 & p-math next = (struct ryb *)malloc(LEN); p = p-next ;p-sno = 0;p-next = NULL;else break;fclose(fp);return head;/read_data.END-void clear(struct ryb * head)/清除函数,清除指定链表所有数据,释放内存空间struct ryb * p;while(1)if(head-sno = 0)free(head);/释放空间break;elsep=head;head = head-next ;free(p);/clear.END-void amend_ryb(struct ryb * head, int sno)/成绩修改函数,修改指定学号学生成绩信息(链表头,要修改成绩的学生学号)struct ryb *p;/链表int arr6,retvalue,i;/临时成绩数组语,数,英,C语言,体育,scanf返回值,i循环用char name9=n;p = head;if (is_sno(head,sno) = false)/判断要修改的学生是否存在printf(您要修改的学号%d不存在!(?_?)n,sno);system(pause);return;while (1)if(p-sno = sno)flag:printf(当前要修的学生学号为%d,姓名:%s,成绩:n语文:%d,数学:%d,英语:%d,C语言:%d,体育:%d,总成绩:%dnn,sno,p-name,p-chinese,p-math,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 民办四川天一学院《食品工厂设计Ⅱ》2023-2024学年第二学期期末试卷
- 环保造纸原料的选择考核试卷
- 液力元件在港口起重机中的应用考核试卷
- 现代金属工艺品设计创新与实践考核试卷
- 水产加工品安全监管与质量控制措施考核试卷
- 电声器件在安防报警系统中的应用考核试卷
- 电子电路的智能穿戴设备电池管理考核试卷
- 电吹风风力减弱修理考核试卷
- 电机制造中的嵌入式系统设计考核试卷
- 2025年-海南省建筑安全员《B证》考试题库
- 托育服务中心项目可行性研究报告
- 春检工作安全措施(标准版)
- 2025版《南方凤凰台·5A教案·基础版·化学》导学案
- TPX6111B数显卧式铣镗床使用手册3
- 法莫替丁注射液-外科
- 【采购管理优化探究文献综述3000字】
- +山东省泰安市肥城市2023-2024学年七年级下学期期中考试英语试题+
- (高清版)WST 830-2024 外照射放射防护剂量转换系数标准
- (高清版)JTGT 5440-2018 公路隧道加固技术规范
- CHT 9016-2012 三维地理信息模型生产规范(正式版)
- 经济学说史考试重点PDF
评论
0/150
提交评论