c语言成绩统计系统
用c语言编写学生成绩管理系统1
#include<stdio.h> 指令#include<string.h>符串函数#include<process.h>明#include<como.h>制台进行数据输入以及输出#define N 2000人★define M 3typedef struct student { char number[10];的学号char name[20];名char sex[10];float score[M];成绩float aver;平均成绩float total;}STU;STU stu[N];mt n;void mputscore(void); void savescore(void); void avergescore(void); void total(void);void modifyscore(void); void lookscore(void); void searchscore(void); void statistic(void); void add(void);加void modify (void);改void delscore(void);void menu(void);单〃编译预处理〃定义处理字〃宏指令的声〃定义通过控〃最多的人数〃统计成绩〃定义类型〃保存所有人〃保存学生姓〃保存性别//保存所有课程〃保存每个人的〃总计成绩//学生成绩新建〃学生成绩保存//学生平均成绩//学生成绩总计//学生成绩修改//学生成绩查看//学生成绩查询//学生成绩统计〃学生成绩添〃学生成绩修〃学生成绩删除〃学生成绩菜void mainQ{ short int flag=0; menuQ;do { Aag=l;switch(getch(J){ case T : inputscoreO;break;//在菜单界面输入 1,调用 1 函数 nputscoreQ 实现输入学生成绩信息功能case 2 : lookscore();break;〃在菜单界面输入2,调用函数lookscore()实现学生成绩按平均分高低排序输出,同时lookscoreQ 函数调用avregescore()函数实现各•个学生的平均 分计算〃在菜单界山|输入3,调用searchscore()函数头现〃在菜单界|何输入4,调用statisticQ 函数输出每一〃在菜单界而输入5,调用modify 。
C语言--学生成绩管理系统
第一章设计内容、任务及具体要求1。
1内容和要求强化学习C语言中有关链表及外部文件的内容,独立设计学生成绩管理系统,并编程实现以下功能:1、整个系统均用C语言实现;2、利用指针、链表来实现学生成绩的数据结构设计;3、系统具有输入、显示、查询、删除、排序、插入,保存、读取基本功能;4、系统的各个功能模块都用函数的形式来实现;5、可以将学生成绩信息保存在文件中。
6、可以将学生信息从文件中读取出来。
1.2实现功能1、每一条记录包括一个学生的学号、姓名、3门成绩、平均成绩.2、输入功能:可以一次完成无数条记录的输入。
3、显示功能:完成全部学生记录的显示。
4、查找功能:完成按姓名查找学生记录,并显示。
5、排序功能:按学生平均成绩进行排序。
6、插入功能:按平均成绩高低插入一条学生记录。
7、保存功能:将学生记录保存在任何自定义的文件中,如保存在:c:\score.8、读取功能:将保存在文件中的学生记录读取出来。
9、有一个清晰美观界面来调用各个功能第二章设计的总体思路2。
1系统功能系统将可以实现以下功能:1、每一条记录包括一个学生的学号、姓名、3门成绩、平均成绩.2、输入功能:可以一次完成无数条记录的输入。
3、显示功能:完成全部学生记录的显示。
4、查找功能:完成按姓名查找学生记录,并显示。
5、排序功能:按学生平均成绩进行排序。
6、插入功能:按平均成绩高低插入一条学生记录。
7、保存功能:将学生记录保存在任何自定义的文件中,如保存在:c:\score。
8、读取功能:将保存在文件中的学生记录读取出来.9、有一个清晰美观界面来调用各个功能2.2系统的总体框架图2—2 系统总体框架图2。
3系统的总体流程图图2-3 系统总体流程图注:此图为概图、程序较多无法一一展示第三章功能模块的具体设计3.1 定义结构体本程序需要定义多个结构体,用于存放学生的相关信息。
struct student//定义结构体{int number;char name[10];float score;float yuwen;float yingyu;float shuxue;float sum;float ave;struct student *next;};typedef struct student score;int n,k;3。
C语言课程设计成绩管理系统
汇报人:
CONTENTS
PART ONE
PART TWO
提高课程设计成绩 管理的效率
方便教师和学生查 询成绩
提供数据分析和统 计功能,为教学改 进提供依据
促进师生之间的交 流和互动,提高教 学质量
功能:成绩管理、课程管理、用户管理、权限管理 特点:模块化设计、易于扩展、用户界面友好、安全性高
信息等
接口:前后端 之间的通信桥 梁,负责数据
传输和转换
安全机制:确 保系统安全, 防止数据泄露
和攻击
性能优化:提 高系统运行效 率,减少响应
时间
界面布局:简洁明了,易于操 作
功能模块:成绩查询、成绩录 入、成绩修改、成绩删除、用 户管理等
界面元素:按钮、文本框、下 拉菜单、提示信息等
交互设计:用户友好的操作流 程,易于理解和使用
用户界面设计:简洁明了,易于操作 系统响应速度:快速响应,无延迟 系统功能完善:满足用户需求,功能齐全 系统稳定性:运行稳定,无崩溃现象 用户反馈:收集用户意见,持续改进系统
提高系统的稳定性和可靠性 优化系统的性能和效率 增加系统的安全性和隐私保护
提高系统的用户友好性和易用性 增加系统的可扩展性和可维护性 提高系统的兼容性和互操作性
数据库设计:使用SQLite数据库,创建数据表,定义字段 数据操作:使用C语言中的SQLite库,实现数据的增删改查操作 数据验证:对用户输入的数据进行验证,确保数据的正确性和安全性 数据展示:将查询到的数据以表格或图形的方式展示给用户,方便用户查看和分析数据
测试方法:单元测试、集成测试、系统测试 测试工具:JUnit、TestNG、Selenium等 调试技巧:断点调试、日志调试、代码覆盖率分析等 问题解决:根据测试结果,定位问题,分析原因,提出解决方案
C语言课程设计_学生成绩管理系统
部署步骤:安装 操作系统、安装 数据库、安装应 用软件等
维护方案:定期 备份数据、定期 检查系统、定期 更新软件等
系统维护方案
定期备份数据: 确保数据安全, 防止数据丢失
定期更新系统: 确保系统安全, 防止病毒和恶意 软件攻击
定期检查硬件: 确保硬件正常运 行,防止硬件故 障
定期培训员工: 确保员工熟悉系 统操作,提高工 作效率
06 系统测试与优化
单元测试
目的:验证单个模块或功能的正确 性
测试内容:功能测试、性能测试、 兼容性测试、安全性测试
添加标题
添加标题
添加标题
添加标题
测试方法:白盒测试、黑盒测试、 灰盒测试
测 试 工 具 : JU n it 、 Te s t NG 、 Selenium等
集成测试
目的:验证系统各模块间的接口和交互是否正常 测试方法:黑盒测试、白盒测试、灰盒测试 测试内容:功能测试、性能测试、安全测试、兼容性测试 测试工具:JMeter、Selenium、Appium等
系统性能优化
性能测试:使用自 动化工具进行性能 测试,如JMeter、 LoadRunner等
性能瓶颈分析:分 析性能测试结果, 找出性能瓶颈,如 数据库查询、网络 延迟等
性能优化:针对性 能瓶颈进行优化, 如优化数据库查询 、减少网络延迟等
性能监控:建立性 能监控体系,实时 监控系统性能,及 时发现和解决性能 问题
学生成绩管理系统是一个用 于管理学生成绩的软件系统
Байду номын сангаас
系统采用模块化设计,易于 维护和扩展
系统支持多种数据格式,如 Excel、CSV等,方便数据
导入和导出
系统目标
提高学生成绩管理效率 方便教师查询、统计和分析学生成绩 提供个性化学习建议和指导 促进家校沟通,提高家长对学生成绩的了解
学生成绩管理系统c语言代码(供参考)
C程序学生管理系统以下是用C语言编写的学生成绩管理系统的简单代码,可以用vc运行(供参考)#include"stdio.h"#include”stdlib。
h"#include"string。
h”typedefstruct student//定义学生{char name[10];int number;char sex[2];int math;int eglish;int clanguge;int average;}student;typedefstruct unit//定义接点{studentdate;struct unit*next;}unit;unit大build()//建立链表并返回指针{unit*p;if((p=(unit*)malloc(sizeof(unit)))==NULL){printf("二>初始化失败!”);return0;}else{p—>next=NULL;p-〉date.number=O;//头结点存放学生人数printf("初始化成功!\n");return p;}}void add(unit大head)//增加学生{unit*p,*q;int m,n=0;q=head-〉next;p=(unit*)malloc(sizeof(unit));printf(”二〉请输入新生姓名!\n");gets(p—>);fflush(stdin);printf("二〉请输入学号!\n");while(n==0){scanf("%d",&m);fflush(stdin);if(q二二NULL)n二1;while(q){if(q->date.number==m){prinTf("二>你输入的学号与已有同学的学号相同,请重新输入!\n");q=head-〉next;break;}else{q=q->next;if(q==NULL)n=1;}}}p一〉date。
C语言课程设计-学生成绩管理系统-完整版
#include<stdio.h> #include<stdlib.h>#include<io.h> #include<string.h> /* strcmp 函数原型包含 */#define N 100 /* 定义最大学生人数为 100*/ struct student /* 学生结构体定义 */ char no[11]; /* 学号 ,10 位 */ char name[10];/* 姓名, 3 个汉字 */ char grade[10];/* 班级 */ char pro[20];/* 专业 */float score[5];/* 储存 5 门功课的成绩 */ float ave;/* 储存平均分 */ int year;/* 入学年 *//* 通过 i 的值,判断信息要查找的信息是否存在 *//* 输出学生成绩函数(公共函数) */ /* 系统初始化函数 */ /* 建立新的数据文件 *//* 从数据文件中读取数据 */ /* 维护界面函数 */ /* 新增一个学生成绩函数 */ /* 修改学生成绩 */ /* 修改成绩 *//* 删除学生信息函数 */ /* 统计界面函数 */ /* 计算每个学生平均分 */ /* 计算每门课程的平均分 */ /* 排序函数 */ /* 按学号排序 */ /* 按平均分排序 */ /* 按单科成绩排序 *//* 交换结构体数组中的两个记录 *//* 选择输出单科成绩 */ /* 查找界面函数 */ /* 按学号查找 */ int findname(char cname[]);/* 按姓名查找 */ void findyear(int cyear); /* 按入学年查找 */ void save(); /* 保存文件 */ void stop(); /* 停顿函数 */void stop()/* 停顿函数 (公共函数) */{printf("Press Any Key To Continue...\n"); getchar();}}stu[N]; int num; void panduani(int); void output(); voidinit(); void newfile(); void read1(); void weihu(); void new1(); void xiugai(); void xgcj(int); void delete1(); void tongji(); void tongji1(); void tongji2(); void paixu1(); void paino(); void paiave(); void paidkcj(); voidchange(int,int); void outputx(int); void find1(); int find(char sno[]);void output() /* 输出学生成绩函数(公共函数) */{int i,j;printf("===================================================================\n");printf(" 学号姓名班级专业入学年 C 语言高数大物电路模电\n");printf("===================================================================\n");for(i=0;i<num;i++){printf("%s %s %s %s %d",stu[i].no,stu[i].name,stu[i].grade,stu[i].pro,stu[i].year) Jfor(j=0;j<5;j++)printf(" %.1f",stu[i].score[j]);printf("\n");}stop();}void init() /* 系统初始化函数*/{if(access("stu.dat",0)) /* 判断文件是否存在*/newfile(); /* 若不存在,新建数据文件*/elseread1(); /* 若存在,读取数据*/}void newfile() /* 建立新的数据文件*/{int i;FILE *fp;if((fp=fopen("stu.dat","wb"))==NULL) /* 创建二进制文件*/{printf(" 创建文件失败,请重新运行程序.\n"); /* 显示" 创建文件失败,请重新运行程序"*/exit(0); /* 终止程序*/}printf(" 初次运行,进行数据初始化...\n");/* 显示" 初次运行,进行数据初始化..."*/ stop();printf(" 请输入学生人数:");/* 显示"请输入学生人数:"*/ scanf("%d",&num);for(i=0;i<num;i++){printf(" 请输入第%d 个学生的学号:",i+1); /* 显示"请输入第i+1 个学生的学号:"*/ getchar(); /* 吃回车*/gets(stu[i].no);printf(" 姓名:"); /* 显示"姓名:"*/gets(stu[i].name);printf(" 班级:"); /* 显示"班级:"*/gets(stu[i].grade);printf(" 专业:"); /* 显示"专业:"*/gets(stu[i].pro);printf(" 入学年n:");/* 显示" 入学年"*/scanf("%d",&stu[i].year);printf("C 语言成绩:");/* 显示"C 语言成绩"*/ scanf("%f",&stu[i].score[0]);printf(" 高数成绩:");/* 显示"高数成绩"*/ scanf("%f",&stu[i].score[1]);printf(" 大物成绩:");/* 显示" 大物成绩"*/ scanf("%f",&stu[i].score[2]);printf(" 电路成绩:");/* 显示" 电路成绩"*/ scanf("%f",&stu[i].score[3]);printf(" 模电成绩:");/* 显示" 模电成绩"*/scanf("%f",&stu[i].score[4]);fwrite(&stu[i],1,sizeof(struct student),fp); /* 把第i+1 名学生成绩写入文件*/ }fclose(fp);printf("========================\n");printf(" 刚才输入的%d 个数据为:\n",num); /*显示"刚才输入的num 个数据为:"*/ printf("========================\n\n");output();}void read1() /* 从数据文件中读取数据*/{FILE *fp;num=0; /*num 为数据文件中实际存储的学生人数*/fp=fopen("stu.dat","r");if(fp==NULL) /* 数据文件不存在*/{printf(" 文件打开失败!重新运行程序\n"); /* 显示"文件打开失败!重新运行程序"*/ exit(0);}while(!feof(fp)) /* 文件结束检测"*/{fread(&stu[num],1,sizeof(struct student),fp); num++;}num--; fclose(fp); printf("\t\t\t=======================================\n"); printf(" \t\t\t现有 %d 个学生的成绩: \n",num); /* 显示 "现有 NUM 个学生的成绩: "*/printf("\t\t\t=======================================\n\n"); output();}void weihu() /* 维护界面函数 */{char c1; while(1){getchar(); if(c1=='9') break; switch(c1) { case '1': new1(); break; case '2': delete1(); case '3': xiugai(); break; default:printf(" 选择有误,请重选! \n");/*" 选择有误,请重选! "*/} } }void new1() /* 新增一个学生成绩函数 */{printf(" 请输入学号 :"); /* 显示 "请输入学号 :"*/ gets(stu[num].no);printf("\t\t\t* 维护*\n");printf("\t\t\t* 1. 新增 *\n"); /*新增 */printf("\t\t\t* 2. 删除 *\n"); /* 删除(按学号)*/printf("\t\t\t* 3. 修改 *\n"); /* 修改 */ printf("\t\t\t*9. 返回*\n"); /* 返回 */printf("\t\t\t************************\n");printf("\t\t\t 请选\n");/* 请选*/printf("\n\n\n\t\t\t* ********************* **\n"); c1=getchar();printf(" 姓名:"); /* 显示"姓名:"*/ gets(stu[num].name);printf(" 班级:"); /* 显示" 班级:"*/ gets(stu[num].grade);printf(" 专业:"); /* 显示"专业:"*/ gets(stu[num].pro);printf(" 入学年:");/* 显示"入学年"*/ scanf("%d",&stu[num].year);printf("C 语言成绩:");/* 显示"C 语言成绩"*/ scanf("%f",&stu[num].score[0]); printf(" 高数成绩:");/* 显示"高数成绩"*/ scanf("%f",&stu[num].score[1]);printf(" 大物成绩:");/* 显示" 大物成绩"*/ scanf("%f",&stu[num].score[2]);printf(" 电路成绩:");/* 显示" 电路成绩"*/ scanf("%f",&stu[num].score[3]);printf(" 模电成绩:");/* 显示" 模电成绩"*/ scanf("%f",&stu[num].score[4]);num++; printf("\n======================================\n");"*/ printf(" 现有%d 个学生的成绩:\n",num); /* 显示"现有NUM 个学生的成绩:printf("======================================\n\n");output();}void xiugai() /* 修改学生成绩*/{char xg[11];int i;printf("\n 请输入要修改学生的学号 :\n\n"); gets(xg);for(i=0;i<num;i++)if(strcmp(stu[i].no,xg)==0)break; if(i==num){printf("\n 数据文件无该生信息 !\n\n 请重新输入学号 .\n\n"); stop(); return;}xgcj(i);} void xgcj(int x)/* 修改成绩 */{ char xueke[5][10]={"C 语言","高数 ","物理","电路","模电"}; char (*p)[10],c; int j,k; p=xueke; for(;;){**\n\n"); printf("\t\t\t 成绩 printf("\t\t\t 1.C 语言 printf("\t\t\t 2.高数printf("\t\t\t 3.物理 printf("\t\t\t 4.电路 printf("\t\t\t5.模电 printf("\t\t\t9.返回printf("\n");printf("\t\t\t** ******************************** printf("\t\t\t** ******************************** \n");\n"); /*C 语言 */ \n"); /*高数 */\n"); /* 大学物理 */ \n"); /*电路 */ \n"); /*模电 */ \n\n"); /* 返回上级 */**\n\n"); printf("\t 请选择要修改的成绩 (按 1.2.3.4.5.9):\n"); c=getchar(); getchar();if(c=='9')break; else if (c>='1'&&c<='5'){k=c-49;printf("\n 请输入 %s 成绩 :\n",p+k); scanf("%f",&stu[x].score[k]); printf("\n 修 息为 :\n");printf(" 学号 姓名 班级 专业 入学年 C 语言 高数 大物电路模电printf("===================================================================\n");printf("%s %s %s %s %d",stu[x].no,stu[x].name,stu[x].grade,stu[x].pro,stu[x].ye ar);for(j=0;j<5;j++)printf(" %.1f",stu[x].score[j]);printf("\n");}else printf("\n 选择有误,请重选!\n\n");stop();}}int find(char sno[]) /* 按学号查找*/{int i;for(i=0;i<num;i++)if(strcmp(stu[i].no,sno)==0) /* 判断两个字符串相等*/return i;/* 查找成功*/return -1;/* 查找失败*/}void delete1() /* 删除学生信息函数*/{char cno[11];int i,j;printf(" 请输入要删除的学生学号:"); /*" 请输入要删除的学生学号"*/gets(cno);i=find(cno);if(i!=-1){for(j=i;j<num;j++)stu[j]=stu[j+1];num--;printf(" 现有%d 个学生的成绩:\n",num); /* 显示" 现有NUM 个学生的成绩:"*/ output();}else {printf(" 请输入正确的学号. \n");stop();}}void tongji(){int i;char c2; while(1) {printf("\t\t\t 请选择 :\n");/* 请选择: */ c2=getchar(); getchar(); if(c2=='9') break; switch(c2){case '1': tongji1();printf("\n\n 学生平均分为 :\n");printf("===========================================\n"); printf(" 学号 姓名 入学年 平均分 \n");printf("===========================================\n"); for(i=0;i<num;i++)printf("%s %s %d %.2f\n",stu[i].no,stu[i].name,stu[i].year,stu[i].ave); stop(); break; case '2': tongji2(); break; default:printf(" 选择有误,请重选 \n");/*" 选择有误,请重选! "*/ }} }void tongji1() /* 计算每个学生平均分 */ { int i,j;for(i=0;i<num;i++){stu[i].ave=0; for(j=0;j<5;j++)stu[i].ave+=stu[i].score[j]; stu[i].ave=stu[i].ave/5;}}void tongji2()/* 计算每门课程的平均分 */{int i,j; float sum;printf("\t\t\t* 统计 *\n");printf("\t\t\t*1. 学生平均分 *\n"); /* 计算学生平均分 */ printf("\t\t\t*2. 课程平均分 *\n"); /* 计算每门课程平均分 */ printf("\t\t\t*9. 返回*\n"); /* 返回 */printf("\n\n\n\t\t\t ***************************** **\n"); printf("\t\t\t* **************************** **\n"); /* 统计界面函数 */float avec[5]; /* 储存每门课的平均分*/ for(j=0;j<5;j++){sum=0;for(i=0;i<num;i++)sum+=stu[i].score[j];avec[j]=sum/num;}printf("\n\n 各科平均分:\n");/*" 各科平均分:"*/printf("===================================\n"); printf("C 语言高数大物电路模电\n"); printf("===================================\n"); for(i=0;i<5;i++)printf("%-7.1f",avec[i]);printf("\n");stop();}void paixu1() /* 排序界面*/{char c3;for(;;){printf("\n\n\n");printf("\t\t\t***********************************\n");printf("\t\t\t* 排序* \n");printf("\t\t\t* 1. 按学号排序* \n"); /* 按学号排序*/printf("\t\t\t* 2. 按平均分排序* \n"); /* 按平均分排序*/printf("\t\t\t* 3. 按单科成绩排序* \n"); /* 按单科成绩排序*/printf("\t\t\t* 9. 返回* \n"); /* 返回*/printf("\t\t\t***********************************\n\n");printf("\t 请选(按 1.2.3.9):\n");/* 请选择:*/c3=getchar();getchar();if(c3=='9') break;switch(c3){case '1':paino();break;case '2':paiave();break;case '3':paidkcj();break; default:printf("\n 选择有误,请重选!\n\n");/* 选择有误,请重选!*/ stop();}}}void paino() /* 按学号排序*/{ /* 按学号从低到高冒泡法排序*/int i,j;for(i=0;i<num;i++)for(j=0;j<num-1-i;j++)if(strcmp(stu[j].no,stu[j+1].no)>0) change(j,j+1);printf("\n 排序后为:\n"); /*" 排序后为:"*/output();}void paiave() /* 按平均分排序*/{ /* 按平均分从高到低冒泡法排序*/int i,j;tongji1(); /* 计算平均成绩*/ for(i=0;i<num;i++) for(j=0;j<num-i-1;j++)if(stu[j].ave<stu[j+1].ave) change(j,j+1);printf("\n\t 排序后为:\n"); /*" 排序后为:"*/printf("\t===============================================\n"); printf("\t 学号姓名入学年平均分排名\n");printf("\t===============================================\n"); for(i=0;i<num;i++) printf("\t%s %s %d %.2f %4d\n",stu[i].no,stu[i].name,stu[i].year,stu[i].ave,i+1); stop();void paidkcj() /* 按单科成绩排序*/ {char c;int i,j,k;while(1){printf("\n");printf("\t\t\t************************************\n\n");printf("\t\t\t 单科成绩\n");printf("\t\t\t 1.C 语言\n"); /*C 语言*/printf("\t\t\t 2.高数\n"); /*高数*/printf("\t\t\t 3.物理\n"); /* 大学物理*/printf("\t\t\t 4.电路\n"); /*电路*/printf("\t\t\t 5.模电\n"); /*模电*/printf("\t\t\t 9.返回\n\n"); /* 返回上级*/printf("\t\t\t************************************\n\n");( 按 1.2.3.4.5.9):\n");printf("\t 请选择:c=getchar();getchar();else if (c>='1'&&c<='5'){k=c-49;for(i=0;i<num;i++) for(j=0;j<num-1-i;j++) if(stu[j].score[k]<stu[j+1].score[k])change(j,j+1);outputx(k);}else printf("\n 选择有误,请重选!\n\n"); stop();}}void change(int i,int j)/* 交换结构体数组中的两个记录*/{struct student temp; temp=stu[i]; stu[i]=stu[j]; stu[j]=temp;}void outputx(int k) /* 选择输出单科成绩*/char xueke[5][10]={"C 语言","高数 ","物理","电路","模电"}; char (*p)[10]; /* 定义一个指向包含 10 个字符型元素的一维数组的指针变量 */int i;p=xueke;printf("\n\t 排序后为 :\n");printf("\t===============================================\n"); printf("\t 学号 姓名入学年 %s 排名 \n",p+k);printf("\t===============================================\n"); for(i=0;i<num;i++)printf("\t%-11s% -10s%-11d%-6.1f%5d\n",stu[i].no, stu[i].name,stu[i].year,stu[i].score[k],i+1);}void find1() /* 查找界面函数 */{char c4;char cno[11],cname[10]; int i,cyear; while(1){printf("\t\t\t* ************************************\n"); printf("\t\t\t* printf("\t\t\t* printf("\t\t\t* printf("\t\t\t* printf("\t\t\t* printf("\t\t\t* printf("\t\t\t请选择 :\n");/* 请选择:*/ c4=getchar();getchar(); if(c4==57) break; switch(c4){case '1':printf(" 输入学号 :\n");/*" 输入学号: "*/ gets(cno); i=find(cno); panduani(i); break; case '2':printf(" 输入姓名 :\n");/*" 输入姓名: "*/ gets(cname);i=findname(cname); panduani(i); break; case '3':printf(" 输入入学年 :\n");/*" 输入入学年 "*/ scanf("%d",&cyear);查找1. 按学号查找2. 按姓名查找3. 按入学年查找 9. 返回************************************\n");*\n");*\n"); /* 按学号查找 */ *\n"); /* 按姓名查找 */ *\n"); /* 按入学年查找 */findyear(cyear);stop();break;default:printf(" 选择有误,请重选!\n");/*" 选择有误,请重选!"*/}}} int findname(char cname[]) /* 按姓名查找*/{int i;for(i=0;i<num;i++)if(strcmp(stu[i].name,cname)==0) /* 判断两个字符串相等*/return i; /* 查找成功*/return -1; /* 查找失败*/}void findyear(int cyear){int i,j,flag=0;for(i=0;i<num;i++)if(stu[i].year==cyear){ flag=1;break;}if(flag==0){printf(" 要查找的学生不存在\n");stop(); }else{printf(" 查找到的学生信息为:\n");/*" 查找到的学生信息为:"*/printf(" 学号姓名班级专业入学年 C 语言高数大物电路模电\n");printf("================================================================ ===\n");for(i=0;i<num;i++){if(stu[i].year==cyear) /* 判断两个数值相等*/{printf("%s %s %s %s %d",stu[i].no,stu[i].name,stu[i].grade,stu[i].pro,stu[i].year); for(j=0;j<5;j++) printf(" %.1f",stu[i].score[j]); printf("\n");}}}}void panduani(int i) /* 通过i 的值,判断信息要查找的信息是否存在*/{int j;if(i==-1){printf(" 要查找的学生不存在\n");/* 要查找的学生不存在*/ stop();}else{printf(" 查找到的学生信息为:\n");/*" 查找到的学生信息为:"*/ printf(" 学号姓名班级专业入学年 C 语言高数大物电路模电\n");printf("================================================================ ===\n");printf("%s %s %s %s %d",stu[i].no,stu[i].name,stu[i].grade,stu[i].pro,stu[i].year)Jfor(j=0;j<5;j++)printf(" %.1f",stu[i].score[j]);printf("\n");stop();}}void save() /* 保存文件*/{int i;FILE *fp;if((fp=fopen("stu.dat","wb"))==NULL) /* 创建二进制文件*/{printf(" 创建文件失败,请重新运行程序.\n"); /* 显示" 创建文件失败,请重新运行程序"*/exit(0); /* 终止程序*/}for(i=0;i<num;i++)fwrite(&stu[i],1,sizeof(struct student),fp); /* 将I+1 名学生成绩写入文件*/ fclose(fp);}void main() /* 主控菜单*/{char c;init();while(1){printf("\t\t 请选择 :\n");/* 请选择: */ c=getchar(); getchar(); switch(c){case '1': weihu(); break; case '2': tongji(); break; case '3': paixu1(); break; case '4': find1(); break; case '9': save(); exit(0); break; default:printf(" 选择有误,请重选 !\n");/*" 选择有误,请重选! "*/printf("\n\t\t***制作:王清珍,陈超,路梓裕,卢诚知,****\n"); printf("\n\t\t*************************************************\n");printf("\t\t* 、 t t • I 、/, 主菜单*\n");printf("\t\t* 1. 维护 *\n"); /* 维护 */ printf("\t\t* 2. 统计 *\n"); /* 统计 */ printf("\t\t* 3. 排序 *\n"); /* 排序 */ printf("\t\t*4. 查找*\n"); /* 排序 */ printf("\t\t*9. 存盘退出*\n"); /* 存盘退出printf("\t\t************* 欢迎登陆学生成绩管理系统 ************\n"); printf("\t\t** ********************************************* **\n");。
C语言-学生成绩管理系统
在TC环境下吧,界面是一片的黑。
可以实现成绩的录入、查询、排序、物理删除、永久删除……记不太清楚了,当时我们的报告要求手写的,也没留下什么电子资料。
C语言还是很好学很好用的,希望对大家有帮助!#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<string.h>struct student{int id;char name[10];int age;char sex[10];char birthady[20];char address[50];char tel[15];char E_mail[30];}st[50];int i=0;void shuru() {char a;do{printf("\ninput num:");scanf("%d",&st[i].id);fflush(stdin);printf("\ninput name:");gets(st[i].name);printf("\ninput age:");scanf("%d",&st[i].age);fflush(stdin);printf("\ninput sex:");gets(st[i].sex);fflush(stdin);printf("\ninput birth:");gets(st[i].birthady);fflush(stdin);printf("\ninput address:");gets(st[i].address);printf("\ninput tell:");scanf("%s",&st[i].tel);printf("\ninput E_mail:");scanf("%s",&st[i].E_mail);printf("\nWhether input another student's information ?(y/n)");fflush(stdin);a=getchar();i++;}while(a=='y' && i<=50);}void xianshi(){int j;printf("======================XUESHENGXINXIGUANLIXITONG=============================\n");printf("num\tname\tage\tsex\tbirth\taddr tell E_mail\n");for(j=0;j<i;j++)printf("%d\t%s\t%d\t%s\t%s\t%s%12s%18s\n",st[j].id,st[j].name,st[j].age,st[j].sex,st[j].birthady,st[j].address,st[j].tel,st[j].E_mail);printf("============================================ZHI ZUO REN:sunqi=========\n");}void clearscreen(){getchar();system("cls");}void paixu(){int j,k;int temp;for(j=0;j<i;j++){for(k=0;k<i-1-j;k++){if(st[k].age<st[k+1].age){temp=st[k].age;st[k].age=st[k+1].age;st[k+1].age=temp;}}}xianshi();}void chazhao(){int m=0;char name[20],b;do{printf("\ninput name of student:");fflush(stdin);gets(name);for(m=0;m<20;m++){if(strcmp(name,st[m].name)==0){printf("\n\tThe student is found in %d\n",m+1);break;}}if(m>=20)printf("\n\tCan not find this student\n");else{printf("num\tname\tage\tsex\tbirth\taddr tell E_mail\n");printf("%d\t%s\t%d\t%s\t%s\t%s%12s%18s\n",st[m].id,st[m].name,st[m].age,st[m].sex,st[m].birthady,st[m].address,st[m].tel,st[m].E_mail); }printf("\nFind another student?(y/n)");fflush(stdin);b=getchar();}while(b=='y');}void shanchu(){char name[20],c;int a,b;do{printf("\nInput the name of delet student:\n");fflush(stdin);gets(name);for(a=0;a<i;a++){if(strcmp(name,st[a].name)==0)break;}for(b=a;b<i;b++)st[b]=st[b+1];if(a>i)printf("\tCan not find this student\n");else{i--;xianshi();}printf("\nContinue delet a student?(y/n) ");fflush(stdin);c=getchar();}while(c=='y');}void charu(){shuru();paixu();}void main(){int change;do{system("cls");printf("*****************XUESHENG XINXI GUANLIXITONG *****************\n"); printf(" 1: shuru xuesheng xingxi\n");printf(" 2: xianshi xuesheng xinxi\n");printf(" 3: chazhao xuesheng xinxi\n");printf(" 4: shanchu xuesheng xinxi\n");printf(" 5: charu xuesheng xinxi\n");printf(" 6: paixu xuesheng xinxi\n");printf(" 7: tuichu chengxu\n");printf("***************************************************************\n"); fflush(stdin);printf("shuru gongneng xuanxiang:");scanf("%d",&change);switch(change){case 1:shuru(); break;case 2:xianshi(); break;case 3:chazhao(); break;case 4:shanchu(); break; case 5:charu(); break; case 6:paixu();break; case 7:break;}getch();}while(change!=7); }。
成绩统计系统c语言
成绩统计系统一目的通过课程设计,加深对《C语言程序设计》课程所学知识的理解,熟练掌握和巩固C 语言的基本知识和语法规范,包括:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);库函数应用(时间函数、绘图函数以及文件的读写操作函数等);复杂任务功能分解方法(自顶向下逐步求精、模块化设计、信息隐藏等)。
学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备利用计算机编程分析解决综合性实际问题的初步能力。
二需求分析1、本程序要求输入一批学生某门课程考试的各题的分数,计算每个人的总分,统计各分数段0~49, 50~59, 60~69,70~79, 80~89, 90~100的人数及占总人数的百分比。
要求输入:课程名称,考试日期,学生班号,学生姓名,学号,课程考试得分。
输出要求:课程名称,考试日期,学生班号;各分数段的人数及百分比。
2、本程序采取模块化方式进行程序设计,要求程序的功能设计、数据结构设计及整体结构设计合理。
学生也可根据自己对题目的理解增加新的功能模块(视情况可另外加分)。
系统以菜单界面方式(至少采用文本菜单界面,如能采用图形菜单界面更好)工作,运行界面友好,演示程序以用户和计算机的对话方式进行。
程序算法说明清晰,理论分析与计算正确,运行情况良好,实验测试数据无误,容错性强(能对错误输入进行判断控制)。
编程风格良好(包括缩进、空行、适当注释、变量名和函数名见名知意,程序容易阅读等)。
三概要设计1、本程序包含两个模块:(1)主程序模块:Main(){用switch语句控制菜单功能;Switch语句调用分支函数完成各个功能;}(2)主程序模块调用的个分支函数:menu() 控制菜单的格式输出;input() 输入考试的信息;statistics()输入学生成绩信息,并进行分数段统计;2、程序中抽象数据类型定义:int choice;控制switch语句选择调用个分支函数,完成各个功能;Char date[]存放日期,完成日期的输入输出;char course[20];存放课程名称;int classNO;存放班级号码;char name[100];存放学生姓名,最大存储数量100;int number[100];存放学生学号;int score[100];存放学生考试分数,用于统计数据;程序流程图如下:显示主菜单界面输入choice的Choice=1输入考试信息2输入成绩信息3退出小工具Else 输出考试信息开始輸入學生成績统计分数所在分数段输出统计结果结束四详细设计(1)主程序模块:main(){for(;;) {menu();printf("Please input you choice here:");scanf("%d",&choice);if(choice>=1&&choice<=3) //switch控制菜单界面switch(choice){case 1:input(); break;case 2:statistics(); break;case 3:exit(0);}else printf("Sorry,your choice is not right,please choose again.");printf("\n Press any key to continue...");getch();clrscr(); }}(2)主菜单显示模块:void menu(){ //控制菜单输出样式printf("\n**************************************************************\n" );printf("\n Welcome to Use the tool ");printf("\n 1.Input information ");printf("\n 2.Statistics score ");printf("\n 3.Eixt ");printf("\n**************************************************************");printf("\n");}(3)输入考试信息模块:void input() {printf("\nPlease input date(y-m-d):");//输入日期scanf("%s",&date);printf("Please input the course:");//输入课程名scanf("%s",&course);printf("Please input the classNO:");//输入班级号scanf("%d",&classNO);}(4)分数段统计模块:void statistics(){int i=0,count[6]={0,0,0,0,0,0};int j=0; int A=0,B=0; //局部变量定义printf("**********************");printf("\n课程名称: %s",course);printf("\n考试时间: %s",date);printf("\n学生班号: %d",classNO);printf("\n**********************");printf("\n请输入统计的学生人数:");scanf("%d",&j);printf("\n请输入一个学生的姓名学号 A题分数 B题分数:\n");for(i=0;i<j;i++){scanf("%s%d%d%d",&name[i],&number[i],&A,&B);score[i]=A+B;printf("此学生的总分数是:");printf("%d+%d=%d",A,B,score[i]); //统计各分数段人数if(score[i]>=0&&score[i]<50) count[0]++;Else if(score[i]>=50&&score[i]<60) count[1]++;Else if(score[i]>=60&&score[i]<70) count[2]++;Else if(score[i]>=70&&score[i]<80) count[3]++;Else if(score[i]>=80&&score[i]<90) count[4]++;Else if(score[i]>=90&&score[i]<=100) count[5]++;}printf("\nThe reasult of Statistics score:\n");printf("分数段 0~49统计结果: %d^…^%.1f%%\n",count[0],(float)count[0]/j*100);printf("分数段50~59统计结果: %d^…^%.1f%%\n",count[1],(float)count[1]/j*100);printf("分数段60~69统计结果: %d^…^%.1f%%\n",count[2],(float)count[2]/j*100);printf("分数段70~79统计结果: %d^…^%.1f%%\n",count[3],(float)count[3]/j*100);printf("分数段80~89统计结果: %d^…^%.1f%%\n",count[4],(float)count[4]/j*100);printf("分数段90~100统计结果: %d^…^%.1f%%\n",count[5],(float)count[5]/j*100);system("pause");}五调试分析程序设计调试分析过程中bug出现很多,下面列出几个代表性错误(1)D:\Program Files\Microsoft Visual Studio\MyProjects\zzzzz\zz.cpp(33) : error C2065: 'clrscr' : undeclared identifier执行 cl.exe 时出错.zz.obj - 1 error(s), 0 warning(s)原因分析:c与c++设计时,对语句的使用混淆,clrscr();语句只能在turbo c中使用,当在vc中实现同样效果要调用system("cls");(2)再输入所有学生的各题分数后,跳出运行界面,不运行分数段统计部分的代码,程序出现强行终止.原因分析:printf("分数段 0~49统计结果: %d^…^%.1f%%\n",count[0],(float)count[0]/j*100); 在统计结束输出时,输出类型不匹配,要将百分比输出由整形格式强制转化成双精度型;(3)运行姓名、学号、分数输入语句:scanf("%s,%d,%d,%d",&name[i],&number[i],&A,&B);不能完成姓名后面参数的输入以及后面的传值.原因分析:输入格式控制中的%s后跟的“,”从键盘输入时归并到了名字的字符数组中,也就不能完成学好分数的输入了,由于字符数组输入时会以第一个空格符结束一个字符串,因此输入过程中用空格把输入的每一部分隔开六测试结果经过调试以后程序基本能正常运行(1)菜单界面(2)选择1,输入考试的日期、科目、班级号码(3)选择2,输出考试的日期、科目、班级号码,提示统计学生人数,并提示输入每个学生的姓名、学号、A题型和B题型分数经检测,输出统计结果正确无误七用户使用说明进入小工具界面后,出现以下菜单:*********************************************************欢迎使用分数段统计工具1.输入考试方面信息2.输入统计学生分数3.退出*********************************************************选择1,会依次提示你输入考试日期、科目、班级号码,输入完成跳回菜单界面;选择2,会在开始显示你前面输入的考试日期、科目、班级号码,提示你输入要统计的学生人数,然后要求你依次输入各个学生的姓名、学号、A、B题的得分,并自动求其总分数,输入所有学生的信息后,程序自动得出各分数段统计结果(人数和百分比);选择3,退出小工具。
C语言数据库-学生成绩统计管理系统
学生成绩统计管理系统C 语言数据结构课程作品指导老师:学生:学号:班级:一、代码#include "stdafx.h"#include <stdio.h>#include <malloc.h>#include<memory.h> #include<string.h> #include<conio.h> #include <stdlib.h>#include <windows.h>struct grade{int score; struct grade *next;};struct address{char stu_num[4]; /* 学号 */ char hname[10]; /* 性别 */ charename[20]; /* 姓名 */ char depart[30]; /* 系别 */ charpaddress[30]; /* 地址 */ char phone[13] /* 联系电话 */ ; structgrade *head;struct address *next;} ;void loaddata ( struct address **had); void printm ( struct address*head); struct address * seek ( struct address *head);void moveg ( int i, struct grade **move); void gotoxy( int x, int y);void sortp( struct address **head);int main ( void ) {char ch; int c;struct address *head=NULL; loaddata(&head);do{system( "cls" );printf( " \n" );printf( " 学生信息与成绩统计: \n" );printf( " 岳鹏程制作 \n" ); printf( "void revise ( struct void delate ( struct void saveda ( struct void addnew ( struct address *hp);address **head); address *tou ); address **had );/* 定义成绩的结构 */===============================================)\;n" printf( "II Menu: II \n");printf( " II 1:print all the personal information. II \n"); printf( " I 2:insert some or one person. I \n" ); printf( " I 3:revire some information. I \n" ); printf( " I 4:delate some information ora person. I \n" ); printf( "I 5:exit. I \n" ); printf( " ===============================================)\;n" printf( "\tInput :" );do{scanf( "%d",&c);getchar( );} while (c<0||c>6);switch ( c ){case 1: printm(head);break; case 2: addnew(&head);break; case 3: revise(head);break; case 4: delate(&head);break; break;case 5: return 0;default :break;fflush(stdin);printf( "continue or not: input y or n\n" );ch=getchar( );saveda(head);while (ch== 'y' ||ch== 'Y' );return 0;void loaddata ( struct address **had ){FILE *afhead;FILE *gfhead;struct address *p1,*hp1=NULL,*head=NULL;struct grade *p2 , *hp2 = NULL;int i=0;int j=6;if ( !(afhead = fopen( "d:\\information.dat" , "rb" ))){return ;}if ( !(gfhead = fopen( "d:\\grade.dat" , "rb" )) ){return ;}while (!feof(afhead)){p1 = ( struct address *)malloc( sizeof ( struct address)); fread(p1, sizeof( struct address),1,afhead);if (feof(afhead)){if (!p1)free(p1);break ;}if (i==0){p1->next = NULL; p1->head = NULL; head = p1;hp1 = p1;i++;}/* 使头指针指向第一个创建的节点*/ else{p1->next = NULL; p1->head = NULL; hp1->next = p1; hp1 = hp1->next;}}*had = head;p1 = *had;/* 成绩是后进先出*/while (!feof(gfhead)){do{p2=( struct grade *)malloc( sizeof ( struct grade)); fread(p2, sizeof ( struct grade),1,gfhead);p2->next = hp2;hp2 = p2;j --;} while ( j > 0 );if ( !feof(gfhead) && p1 != NULL) {p1 -> head = hp2;p1 = p1 -> next;}}fclose(afhead);fclose(gfhead);}void printm ( struct address *head) {int i=0 , j;float iscore;struct grade *ghd=NULL;struct address *hd=NULL; hd = head;system( "cls" );if (hd==NULL) {printf( "\t\t=== No sourse in the file! ===");return ;}while (hd != NULL){ gotoxy(1,i+1);printf( "==========================================================\n" );for (j=0;j<6;j++){gotoxy(1,i+1+j);printf( " II ");gotoxy(58,i+1+j);printf( "I ");}gotoxy(1,i+6);printf( n");"Nummber: %s" , hd->stu_num); "Name-spelling: %s" , hd->ename ); "Sex:%s" , hd->hname ); "Department: %s" , hd->depart); "Address: %s" , hd->paddress); "Phone nummber: %s\n" , hd->phone); printf(n");printf( "\tHis\\Her score is : \n" );ghd=hd->head;printf( "name 地理 生物 物理 英语 数学语文 \n" );printf( "%s " ,hd->ename);while ( ghd != NULL ){printf( " %d\t" , ghd->score); iscore += ghd -> score;ghd = ghd->next;}printf( " \n " );gotoxy(5,i+2);printf( gotoxy(30,i+2);printf( gotoxy(5,i+3);printf( gotoxy(30,i+3);printf( gotoxy(5,i+4);printf( gotoxy(5,i+5);printf(hd = hd->next;i = i + 10;}}void delate ( struct address **head){char cinput[20];struct address *PRE,*TARGE;TARGE = (*head);if (!TARGE){printf( "========= No any information!!" );return ;}fflush(stdin);printf( " Input the name or student nummber you want to delate:\t" ); scanf( " %s" , cinput);while (stricmp(cinput, TARGE->stu_num)&&stricmp(cinput ,TARGE->ename)&& TARGE != NULL){PRE = TARGE;TARGE=TARGE->next;}if (TARGE == NULL){printf( "==== No this information! ====\n" );return ;}if (TARGE == (*head) ){(*head) = return (*head) -> next;1}else{PRE->next = TARGE->next; }if (!TARGE) free(TARGE);}//************* void revise (修改信息struct address *head){int ch;char cinput[20];char choice;struct address *TARGE = NULL; struct grade *move;do { system( "cls" );printf( " Input the name or student nummber you want to delate:\t" ); fflush(stdin);scanf( " %s" , cinput);TARGE = head;while (stricmp( cinput, TARGE->stu_num) && stricmp(cinput ,TARGE->ename) && TARGE != NULL){TARGE = TARGE->next;}if (TARGE == NULL) return ;printf( "input the command:\n1->revise the sex;\t\t" ); printf( "2->revise the ename;\n3->revise the student nummber;\t\t" );printf( "4->revise the depart;\n5->revise the address;\t\t" );printf( "6->revise the phone\n7->revise the geography;\t\t" );printf( "8-.revise the biology\n9->revise the physics;\t\t" ); printf( "10->revise the english;\n11->revise the maths ;\t\t" ); printf( "12->to revise the chinese.\n" ); fflush( stdin); do{scanf( "%d",&ch); } while (ch>12||ch<0);switch (ch)case 1 :printf( scan f( II "enter the your sex male orfemale :\n" %s" , TARGE->hname););break ;case 2 :printf(scanf( II "enter the name in Spell:\n" %s" ,TARGE->ename););break ; case 3 :printf( scanf( II"enter the Student nummer:\n %s" ,&TARGE->stu_num);II);break ; case 4 :printf(scanf( II "input your Department:\n" %s" ,TARGE->depart);); break ; case 5 :printf( scanf( II"input your present Address:\n %s" ,TARGE->paddress);II);break ; case 6 :printf(scanf( II "input your mobie nummer:\n" %s" ,TARGE->phone);); break ; case 7 :printf(scanf( II"input your geography score\n" %d" ,&(move->score)););break ; printf( scanf( "input your biology score\n""%d" , &(move->score));case 8 :moveg (8,&move);break ;case 9 : moveg (9, &move); printf("input your physics score:\n" );scanf( "%d" , &(move->score));break ;case 10: moveg (10, &move); printf("input your english score:\n" );scanf( "%d" , &(move->score));break ;case 11: moveg (11, &move); printf("input your maths score:\n" );scanf( "%d" , &(move->score));break ;case 12: moveg (12, &move); printf("input your chinese score:\n" );scanf( "%d" , &(move->score)); move=move->next;break ;default : ;} fflush(stdin);printf( "if you want to revise other detail formation input y\n" ); scanf( "%c" ,&choice);} while (choice == 'y' || choice == 'Y' );}void moveg ( int i, struct grade **move){for (i = i - 7; i > 0; i--){( *move ) = ( *move ) -> next;}}//******************* 删除原来的记录并保存现在的ok! void saveda ( struct address *tou){FILE *afhead , *gfhead;struct grade *gcu;struct address *tail = tou;if ((afhead = fopen( "d:\\information.dat" , "wb" )) == NULL) {printf( "file error!\n" ); return ;}if ((gfhead = fopen( "d:\\grade.dat" , "wb" )) == NULL) {printf( "file error!\n" ); return ;} /* 打开保存数据的文件*/while (tail != NULL){fwrite(tail , sizeof ( struct address) , 1 , afhead);gcu = tail -> head;while (gcu != NULL){fwrite(gcu , sizeof ( struct grade) , 1 , gfhead); gcu = gcu -> next;}tail = tail -> next;}fclose(afhead); fclose(gfhead);}void addnew ( struct address **head ){struct address *phead = NULL , *pTempNode = NULL; struct grade *gh = NULL;pTempNode=( struct address *)malloc( sizeof ( struct address));printf( "input num (<10000): " );scanf( "%s" , &pTempNode->stu_num);printf( "input your sex male or female: " );scanf( "%s" , pTempNode->hname);printf( "input name in spelling: " );scanf( "%s" , pTempNode->ename);printf( "input your department: " );scanf( "%s" , pTempNode->depart);printf( "input your address: " );scanf( "%s" , pTempNode->paddress);printf( "input your phone nummber: " );scanf( "%s" , pTempNode->phone);pTempNode -> next = NULL;pTempNode -> head = NULL; fflush(stdin);printf( "input chinese:" ); pTempNode->head =sizeof ( struct grade)); ( struct grade *)malloc( scanf( "%d" ,&pTempNode->head->score); gh =pTempNode->head;printf( "input maths score: " );sizeof ( struct grade));gh -> next = ( struct grade *)malloc( gh =gh -> next;scanf( "%d" , &gh -> score);printf( "input English score: " ); gh->nextsizeof ( struct grade));= ( struct grade *)malloc( gh = gh -> next;scanf( "%d" ,&gh->score);printf( "input physics score: " ); gh->next= ( struct grade *)malloc( gh = gh->next ;sizeof ( struct grade));scanf( "%d" , &gh->score);printf( "input bilolgy score: " );sizeof ( struct grade));gh->next = ( struct grade *)malloc( gh =gh->next ;scanf( "%d" ,&gh->score);printf( "input geography score: " );gh->next = ( struct grade *)malloc( sizeof ( struct grade));scanf( "%d" , &(gh->next->score)); gh->next->next = NULL ;if ((*head) == NULL){(*head) = pTempNode;}else{phead = (*head);while (phead != NULL && phead->next != NULL){ phead = phead->next;}phead->next = pTempNode;}printf( "you have add a new person!" );}二、设计思路“任意增删”实现主要是靠链表。
学生成绩管理系统C语言版
1、2、编一程序,能计算每个学生的总分和平均分。
3、编一程序,能按输入要求打印各门课程的最高分和最低分的同学。
4、编一程序,能将五个学生的成绩按总分进行降序排序。
5、编一程序,能删除一个学生的记录;6、编一程序,能增加一个学生的记录;建立一个菜单模式的学生信息管理系统,完成功能如下:一、建立主菜单*****学生信息管理系统*****1、输入学生信息2、输出学生信息3、计算每个同学成绩的总分与平均分4、对学生成绩进行排序5、输出每门功课最高分的同学信息6、输出每门功课最低分的同学信息7、退出系统主菜单界面:二、将综合练习一中的程序改写为子程序并能通过主菜单进行调用。
先上图开发环境windows 7,vc 6.0 开始贴代码:/*************** 张海山* 10软件2班* 安庆职业技术学院* QQ:136533295******************/#include"stdio.h"#include"stdlib.h"#include"malloc.h"#include"string.h"typedef struct lode{int id;char name[20];char sex[10];int score[4];struct lode *next;}lode,*linklist;linklist input(linklist head)//输入学生信息{char cmd='y';int t,i,l;char name[10];char sex[2];int score[3]={0};//int sum;linklist p;while(cmd=='y'||cmd=='Y'){p=(linklist)malloc(sizeof(lode));printf("请输入学生的编号\n");fflush(stdin);scanf("%d",&t);p->id=t;printf("请输入学生的姓名:\n");fflush(stdin);scanf("%s",p->name);/* l=strlen(p->name);p->sex[l]='\0';/* for(i=0;i<l;i++){p->name[i]=name[i];}*/printf("请输入学生的性别:\n");fflush(stdin);scanf("%s",p->sex);/* l=strlen(p->sex);p->sex[l]='\0';/* for(i=0;i<l;i++){p->sex[i]=sex[i];}*/fflush(stdin);printf("请依次输入学生的三门课成绩:\n");scanf("%d",&score[0]);p->score[0]=score[0];fflush(stdin);scanf("%d",&score[1]);p->score[1]=score[1];fflush(stdin);scanf("%d",&score[2]);p->score[2]=score[2];fflush(stdin);p->next=head->next;head->next=p;printf("是否继续(y)&返回主菜单(n) y&n\n");fflush(stdin);scanf("%c",&cmd);}return head;}linklist print(linklist head){linklist p;int i=1;p=head->next;printf("\t序号\t姓名\t性别\t英语\t数学\t语文\n");while(p!=NULL){printf("\t%d\t%s\t%s\t%d\t%d\t%d\n",p->id,p->name,p->sex,p->score[0],p->score[1],p->sco re[2]);p=p->next;/*if(p==NULL)break;printf("%d\n",i);*/}//printf("%d\n",i);//printf("i=%d\n",i);return 0;}void avg(linklist head){int sum=0;double avg=0;linklist p;p=head->next;while(p!=NULL){sum=0;sum=p->score[1]+p->score[2]+p->score[0];avg=sum/3;printf("%s的总分为:%d\t平均分为:%.2lf\n",p->name,sum,avg);p=p->next;}}void maxmin(linklist head){linklist p;intmax1=0,max1index,min1=head->next->score[0],min1index,max2=0,max2index,min2=head->nex t->score[1],min2index,max3=0,max3index,min3=head->next->score[2],min3index;p=head->next;while(p!=NULL){if(max1<(p->score[0])){max1=p->score[0];max1index=p->id;}if(min1>=(p->score[0])){min1=p->score[0];min1index=p->id;}if(max2<(p->score[1])){max2=p->score[1];max2index=p->id;}if(min2>=(p->score[1])){min2=p->score[1];min2index=p->id;}if(max3<(p->score[2])){max3=p->score[2];max3index=p->id;}if(min3>=(p->score[2])){min3=p->score[2];min3index=p->id;}p=p->next;}printf("英语:\n");p=head->next;while(p!=NULL){if((p->id)==max1index)printf("英语最高分为:%d\t姓名为:%s\n",p->score[0],p->name);if((p->id)==min1index)printf("英语最低分为:%d\t姓名为:%s\n",p->score[0],p->name);p=p->next;}printf("数学:\n");p=head->next;while(p!=NULL){if((p->id)==max2index)printf("数学最高分为:%d\t姓名为:%s\n",p->score[1],p->name);if((p->id)==min2index)printf("数学最低分为:%d\t姓名为:%s\n",p->score[1],p->name);p=p->next;}printf("语文:\n");p=head->next;while(p!=NULL){if((p->id)==max3index)printf("语文最高分为:%d\t姓名为:%s\n",p->score[2],p->name);if((p->id)==min3index)printf("语文最低分为:%d\t姓名为:%s\n",p->score[2],p->name);p=p->next;}}void rank(linklist head){linklist p;int i=0,j,k,n=0;int sum[100];p=head->next;while(p!=NULL){n++;sum[i]=p->score[1]+p->score[2]+p->score[0];i++;p=p->next;}printf("n=%d\n",n);for(i=1;i<6;i++){for(j=0;j<6-i;j++)if(sum[j]<sum[j+1]){k=sum[j];sum[j]=sum[j+1];sum[j+1]=k;}}printf("\t序号\t姓名\t性别\t英语\t数学\t语文\n");for(i=0;i<n;i++){p=head->next;while(p!=NULL){if(sum[i]==(p->score[1]+p->score[2]+p->score[0])){printf("\t%d\t%s\t%s\t%d\t%d\t%d\n",p->id,p->name,p->sex,p->score[0],p->score[1],p->sco re[2]);break;}p=p->next;}}}void add(linklist head){linklist p,q;p=head;q=(linklist)malloc(sizeof(lode));printf("请输入要插入学生的序号:\n");fflush(stdin);scanf("%d",&q->id);fflush(stdin);printf("请输入学生的姓名:\n");scanf("%s",q->name);fflush(stdin);printf("请输入学生性别:\n");scanf("%s",q->sex);fflush(stdin);printf("请依次输入学生的三门课成绩:\n");scanf("%d",&q->score[0]);fflush(stdin);scanf("%d",&q->score[1]);fflush(stdin);scanf("%d",&q->score[2]);fflush(stdin);q->next=NULL;while(p->next!=NULL){p=p->next;}p->next=q;//p->next=NULL;}void del(linklist head){linklist p,temp;int j;p=head->next;temp=head;printf("请输入要删除学生记录的序号:\n");scanf("%d",&j);while(p!=NULL){if(p->id!=j){p=p->next;temp=temp->next;}else{temp->next=p->next;free(p);break;}}}void main(){int cmd;linklist head;head=(linklist)malloc(sizeof(lode));head->next=NULL;do{printf("\n\n |***************学生成绩管理程序***************|\n");printf(" |----------------------------------------------|\n");printf(" | |\n");printf(" | 主菜单|\n");printf(" | |\n");printf(" |----------------------------------------------|\n");printf(" | |\n");printf(" | 请输入选择项目:|\n");printf(" | |\n");printf(" | 1、输入学生成绩|\n");printf(" | |\n");printf(" | 2、输出学生成绩|\n");printf(" | |\n");printf(" | 3、计算总成绩、平均成绩|\n");printf(" | |\n");printf(" | 4、求最高分、最低分|\n");printf(" | |\n");printf(" | 5、排序|\n");printf(" | |\n");printf(" | 6、增加记录|\n");printf(" | |\n");printf(" | 7、删除记录|\n");printf(" | |\n");printf(" | 0、退出系统|\n");printf(" | |\n");printf(" |----------------------------------------------|\n");scanf("%d",&cmd);switch(cmd){case 0:break; //退出系统case 1: input(head);break; //输入学生信息case 2: print(head);break; //输出学生信息case 3: avg(head);break; //求总成绩、平均数case 4: maxmin(head);break; //最高分case 5: rank(head);break; //排序case 6: add(head);break; //增加记录case 7: del(head);break; //删除记录default :printf("您输入错误!\n");}}while(cmd!=0);}因为是C语言版的要严格按照样子输入哦要不然就会出现不可预料的结果。
C语言课程设计学生成绩管理系统
PART THREE
学生信息包括:姓名、学号、性别、班级、成绩等 学生信息录入方式:手动输入、文件导入、数据库查询等 学生信息录入界面设计:简洁明了,易于操作 学生信息录入注意事项:确保信息准确无误,避免重复录入
查询结果:显示学生的基本 信息、成绩、课程等信息
系统故障分类:硬件故障、软件故障、网络故障等 故障处理流程:发现故障、分析原因、采取措施、恢复系统 应急预案:制定应急预案、定期演练、及时更新 数据备份与恢复:定期备份数据、灾难恢复计划
汇报人:
,a click to unlimited possibilities
汇报人:
CONTENTS
PART ONE
PART TWO
目标:实现学 生成绩的高效
管理
功能:学生信 息管理、成绩 录入、成绩查 询、成绩统计、 成绩分析、成
绩排名等
系统用户:学生、教师、管理员
权限设置:学生只能查看自己的成绩,教师可以查看和管理所有学生的成绩,管理员可以管理所有用户和权限
查询和报表的界面设计:简 洁明了,易于操作
查询和报表的数据处理:高效、 准确,保证数据的一致性和完 整性
PART SIX
数据备份:定期备份数据,防止数据丢失 数据恢复:在数据丢失或损坏时,能够快速恢复数据 备份策略:制定合理的备份策略,确保数据的完整性和一致性 备份工具:使用专业的备份工具,提高备份效率和可靠性
删除方式:通过学生ID进行 删除
删除条件:学生信息存在且 未被删除
删除操作:在数据库中执行 删除语句
删除结果:学生信息从数据库 中被删除,系统提示删除成功
PART FOUR
C语言成绩统计系统
一、课程设计题目:C语言成绩统计系统二、课程设计工作自2011年6月13日起至2011年6月19日止三、课程设计内容:录入学生的信息,并且保存到一个磁盘文件。
可以录入学生的平时成绩和考试成绩,并统计学生的总成绩(计算方法:总成绩=考试成绩*80%+平时成绩20%)。
按照总成绩对学生进行排序,查询某个学生的成绩(按照学号、姓名、成绩等关键词进行查询)。
制定学生信息至少包括:学号、姓名、班级、成绩等内容。
四、课程设计要求:程序质量:●贯彻结构化程序设计思想。
●用户界面友好,功能明确,操作方便;可以加以其它功能或修饰。
●用户界面中的菜单至少应包括“保存文件”,“平时成绩”,“考试成绩”,“总成绩”,“查询成绩”等5项。
●代码应适当缩进,并给出必要的注释,以增强程序的可读性。
课程设计说明书:课程结束后,上交课程设计说明书(打印稿和电子稿),其内容如下:●封面●课程设计任务书●目录●需求分析(分析题目的要求)●程序流程图(总体流程图和主要功能模块流程图)●核心技术的实现说明及相应程序段●个人总结●参考资料●源程序及适当的注释指导教师:学生签名:目录一、需求分析 (1)二、程序流程图 (2)三、主要界面截图 (5)四、技术要点 (8)五、个人总结 (9)六、参考文献 (10)七、源程序 (10)一、需求分析经过对程序设计题目的分析可知,整个程序的设计实现大致分为六个模块,其中每一个模块对应一个函数,他们的功能分别是:输入学生信息,输入平时成绩和考试成绩,算出总成绩并排序,成绩查询,在这些函数当中,前三个函数的实现严格按照题目的要求,而后面的一个函数属于附加功能。
1、输入学生信息主要实现程序最初运行时学生数据的录入以及其后的运行中学生数据的追加功能;2、输入平时成绩和考试成绩实现的功能是对学生成绩的输入;3、总成绩并排序按照题目的具体要求实现的是总成绩的排序;4、成绩查询允许按照姓名对学生的各科成绩进行查询;除上面介绍的功能之外,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。
c语言程序设计学生管理系统统计成绩部分
学生管理系统是现代教育管理中不可或缺的一部分,而统计成绩的功能更是其核心之一。
在C语言程序设计中,学生管理系统的成绩统计部分是非常重要的,因为它涉及到对学生成绩数据的存储、处理和展示。
在本文中,我们将深入探讨C语言程序设计中学生管理系统统计成绩部分的实现原理和功能设计。
1. 数据存储和管理在C语言程序设计中,我们可以通过数组、结构体或指针来存储学生成绩数据。
以数组为例,我们可以定义一个二维数组来存储学生成绩:```cint scores[100][3];```其中,第一维表示学生的数量,第二维表示科目的数量。
这样我们就可以方便地存储每个学生的各科成绩,并且可以通过循环来进行数据的遍历和处理。
2. 成绩统计和计算在学生管理系统中,成绩统计和计算是至关重要的。
我们可以通过定义函数来实现成绩的统计和计算,比如计算平均分、最高分、最低分等。
以下是一个简单的成绩统计函数示例:```cfloat calculateAverage(int scores[], int n) {float sum = 0;for (int i = 0; i < n; i++) {sum += scores[i];}return sum / n;}```通过这样的函数,我们可以方便地计算出学生的平均成绩,并且可以在程序中多次调用以实现不同的统计功能。
3. 数据展示和输出在学生管理系统中,数据的展示和输出是非常重要的一环。
我们可以通过控制台输出或文件输出的方式来展示学生成绩,从而方便教师和学生对成绩进行查看和分析。
以下是一个简单的控制台输出函数示例:```cvoid displayScores(int scores[][3], int n) {for (int i = 0; i < n; i++) {printf("Student %d: ", i+1);for (int j = 0; j < 3; j++) {printf("%d ", scores[i][j]);}printf("\n");}}```通过这样的函数,我们可以将学生成绩在控制台上进行逐行展示,从而让教师和学生能够清晰地了解每个学生的成绩情况。
学生成绩管理系统C语言(附完整源代码)
学生成绩管理系统C语言(附完整源代码)学生成绩管理系统C语言(附完整源代码)课程设计报告学生成绩管理系统院系:专业:班级:完成日期: 2009年1月03日设计题目:学生成绩管理系统目录1、题目描述2、算法设计/设计思想3、结构框图、各模块的功能描述4、主体思想:5、程序的,,,流程图6、源代码1.题目描述设计一个简单的学生成绩管理系统,要求有简单的界面,程序段要分清模块,该程序应该:(1)输入学生成绩,求总分,平均分,以及排序。
(2)查询学生单科成绩,总分和平均成绩;(3)添加、修改学生成绩具有下列功能:(4)实现保存与查看功能2.算法设计/设计思想利用二维数组——定义stu[][]存储学生学号、各科成绩,总分,平均分,名次,利用文件来存储,读取数据。
详细合作是::负责inputx(),print1(),input();:卖力文件的储备和读取,main(),System(),Idea()和各挪用函数之间的连;:卖力find1(),find2(),find3(),find31(),Find();:负责del(),add(),change1(),Change();前期调试由小组配合卖力。
3.结构框图、各模块的功能描述3.1建立成就表3.1.1 input()功用是输退学生的信息,便于当前的查询、欣赏。
3.2增加3.2.1 add( )功用是向inputy()增加新的内容。
3.3.2 chance( )对单科成绩进行修改。
3.3查询3.3.1可根据学号,科目,名次,进行查询。
3.3.2查询内容包孕:该学生的各课成就、、均匀分。
3.4删除3.4.1能够输退学号删除一逻辑学生的一课成就。
3.5浏览成绩单3.5.1通过此print1()可以查看所有学生的各课成绩、总分、平均分和名次。
3.6文件()3.6.1保存以上所输入的信息以达到既是关闭窗口信息也不会丢失信息的目的。
3.6.2随时打开,修改文件。
3.7.退出功用是退出主菜单退出系意见评述功能菜单统输入增加及改查找功用退出功用菜单成就功用查输排查找学学添修某某生生加改XXX某成成就绩科绩绩绩成就按按按名学科次号目查查查找找找四、主体思想:1、斟酌到此步伐量大代码多,以是用函数挪用,分几小我去完成。
c语言课程设计学生成绩管理系统流程图
C语言课程设计学生成绩管理系统流程图本文介绍了一个基于C语言的学生成绩管理系统的流程图设计。
该系统可以帮助学校管理学生的成绩信息,包括录入学生成绩、查询学生信息、统计学生成绩等功能。
1. 系统流程图概览graph LRA[开始] --> B(登录系统)B --> C{登录是否成功}C -- 是 --> D(显示菜单)C -- 否 --> BD --> E[输入操作选项]E --> F{选择操作}F -- 1 --> G(录入学生成绩)F -- 2 --> H(查询学生信息)F -- 3 --> I(统计学生成绩)F -- 4 --> J(显示菜单)F -- 5 --> K(退出系统)G --> L[输入学生信息]L --> M[保存学生成绩]M --> N[继续操作]N --> GH --> O[输入学生学号]O --> P[查询学生信息]P --> NI --> Q[统计学生成绩]Q --> R[显示统计结果]R --> NJ --> DK --> S[结束]2. 系统流程图详解2.1. 开始系统开始运行,进入登录界面。
2.2. 登录系统用户输入登录信息,包括用户名和密码。
2.3. 用户登录验证系统对用户输入的用户名和密码进行验证,包括检查用户名是否存在和密码是否匹配等。
•如果登录验证成功,进入显示菜单页面。
•如果登录验证失败,返回登录系统页面,提示用户重新输入。
2.4. 显示菜单系统显示主功能菜单,供用户选择需要执行的操作。
2.5. 输入操作选项用户根据菜单提示,输入相应的操作选项。
2.6. 选择操作系统根据用户输入的操作选项,执行相应的操作。
•如果用户选择录入学生成绩,进入输入学生信息步骤。
•如果用户选择查询学生信息,进入输入学生学号步骤。
•如果用户选择统计学生成绩,进入统计学生成绩步骤。
用c语言编写一个成绩管理系统
程序说明:有N个学生,每个学生的数据包含学号(不重复)、姓名、三门课的成绩及平均成绩,试设计一学生成绩管理系统,使之能提供以下功能:(1)主菜单学生成绩管理系统 1、成绩录入 2、成绩查询 3、成绩统计 4、退出(2)各菜单项功能① 成绩录入:输入学生的学号、姓名及三门课的成绩;② 成绩查询:(至少一种查询方式)。
v 按学号查询学生记录。
v 查询不及格学生的记录。
③成绩统计: v 计算学生的平均分; v 根据学生的平均分高低,对学生的数据进行排序后输出; v 对学生单科成绩排序,输出学生姓名与该科成绩;④退出系统:退出整个系统(即主菜单)。
(3)结构体数组:#define N 30 struct student {int num; /* 定义学号*/char name[20]; /* 定义姓名*/float score[3]; /* 定义存贮三门课成绩的数组*/float average; /* 定义平均成绩*/};struct student stu[N]; /* 定义结构体数组,存贮多个学生的记录*/. #include<stdio.h>#include<stdlib.h>#include<string.h>struct student{ int num; char name[20];float score[4];float average;}stu[10000];long t,max;bool unpass[1000];FILE *fstu=fopen("stud.dat","at+");int init(){int no,i;float s[4],ave;char nam[20];while (!feof(fstu)){fscanf(fstu,"%d",&no);fscanf(fstu,"%s",nam);fscanf(fstu,"%f%f%f%f",&s[1],&s[2],&s[3],&ave);if (no>max)max=no;stu[no].num=no;strcpy(stu[no].name,nam);unpass[no]=false; for (i=1;i<=3;i++){stu[no].score[i]=s[i];if (s[i]<60)unpass[no]=true;}stu[no].average=ave;}}int stuinsert(){int no,i;float s[3],sum;char nam[20],cha;loop:printf("请输入学生的学号、姓名及三门课的成绩\n"); scanf("%d",&no); scanf("%s",nam);scanf("%f%f%f/n",&s[1],&s[2],&s[3]);if (no>max)max=no;stu[no].num=no;sum=0.0;strcpy(stu[no].name,nam);unpass[no]=false;for (i=1;i<=3;i++){stu[no].score[i]=s[i];sum=sum+s[i];if (s[i]<60)unpass[no]=true;}stu[no].average=sum/3.0;fprintf(fstu,"\n");fprintf(fstu,"%d %s %f %f %f %f\n",stu[no].num,stu[no].name,stu[no].score[1],stu[no].s core[2],stu[no].score[3],stu[no].average);}int find(int x){long i,no;switch (x){case 1:printf("请输入学号:");scanf("%d",&no);printf("%d %s %f %f %f %f\n",stu[no].num,stu[no].name,stu[no].score[1], stu[no].scor e[2],stu[no].score[3],stu[no].average);break;case 2:for (i=1;i<=max;i++) if (unpass[i]) printf("%d %s %f %f %f %f\n",stu[i].num,st u[i].name,stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].average);break;}}int sort(int x){extern int headprint(int x);student so[1000];int i,j,k,n;switch (x){case 1:for (i=1;i<=max;i++) if (stu[i].num==i) printf("%d %s %f\n",i,stu[i].name,stu[i].av erage);break;case 2:n=0;for (i=1;i<=max;i++){j=1; if (stu[i].num==i)while ((so[j].average>stu[i].average)&&(j<=n))j++; n++;for (k=n;k>=j;k--) so[k]=so[k-1]; so[j]=stu[i];}for (i=1;i<=n;i++)printf("%d %s %f %f %f %f\n",so[i].num,so[i].name,so[i].score[1],so[i].score[2],so[i].sc ore[3],so[i].average); break; case 3:headprint(4);}}int othersort(int x){extern int headprint(int x);student so[1000];int i,j,k,n,q; q=0;switch (x){case 1:if (q==0) q=1;case 2:if (q==0) q=2;case 3:if (q==0) q=3;n=0;for (i=1;i<=max;i++){j=1;if (stu[i].num==i)while ((so[j].score[q]>stu[i].score[q])&&(j<=n))j++;n++;for (k=n;k>=j;k--)so[k]=so[k-1];so[j]=stu[i];}for (i=1;i<=n;i++)printf("%d %s %f\n",so[i].num,so[i].name,so[i].score[q]);break;}}int select(int x){extern int headprint(int x);int p;switch (x){case 1:scanf("%d",&p);switch (p){case 1:stuinsert();break;case 2:headprint(2);break;case 3:headprint(3);break;case 4:t=0;break;}break;case 2:scanf("%d",&p);find(p);break;case 3:scanf("%d",&p);sort(p);break;case 4:scanf("%d",&p);othersort(p);break;}}int headprint(int x){switch (x){ case 1:printf("学生成绩管理系统\n");printf("1、成绩录入\n"); printf("2、成绩查询\n");printf("3、成绩统计\n");printf("4、退出\n");select(x);break;case 2:printf("1、按学号查询学生记录\n");printf("2、查询不及格学生的记录\n");select(x);break;case 3:printf("1、计算学生的平均分\n");printf("2、根据学生的平均分高低,对学生的数据进行排序后输出\n");printf("3、对学生单科成绩排序,输出学生姓名与该科成绩\n");select(x);break;case 4:printf("1、第一科\n"); printf("2、第二科\n");printf("3、第三科\n"); select(x); break;;}}int main(){ max=0; t=1;init();loop:headprint(1);if (t!=0)goto loop;}【下载本文档,可以自由复制内容或自由编辑修改内容,更多精彩文章,期待你的好评和关注,我将一如既往为您服务】。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言成绩统计系统#include <stdio.h>#include <stdlib.h>#include <string.h>int shoudsave=0; /* 为后面判断是否改动资料做铺垫*/ struct student{char num[11];/*学号*/char name[20];int cgrade;int mgrade;int egrade;int totle;int ave;float ajd;//平均绩点};typedef struct node{struct student data;struct node *next;} Node,*Link;void menu(){printf("************************************************************************ ********");printf("\t1输入学生资料\t\t\t\t\t2删除学生资料\n");printf("\t3查询学生资料\t\t\t\t\t4修改学生资料\n");printf("\t5显示学生资料\t\t\t\t\t6统计学生成绩\n");printf("\t7排序学生成绩\t\t\t\t\t8保存学生资料\n");printf("\t9获取帮助信息\t\t\t\t\t0退出系统\n");printf("************************************************************************ ********\n");}void printstart(){printf("--------------------------------------------------------------------------------\n");}void Wrong(){printf("\n=====>提示:输入错误!\n");}void Nofind(){printf("\n=====>提示:没有找到该学生!\n");}void printc() /* 本函数用于输出中文标题*/{printf(" 学号\t 姓名英语成绩数学成绩C语言成绩总分平均分平均绩点\n");}void printe(Node *p)/*本函数用于输出中文标题下的具体内容*/{printf("%-12s%s\t%d\t %d\t %d\t %d\t %d\t %2.1f\n",p->data.num,p->d ,p->data.egrade,p->data.mgrade,p->data.cgrade,p->data.totle,p->data.ave,p->data.ajd);}Node *Locate(Link l,char findmess[],char nameornum[]) /*该函数用于定位连表中符合要求的接点,并返回该指针*/{Node *r;if(strcmp(nameornum,"num")==0) /*按学号查询*/{r=l->next;while(r){if(strcmp(r->data.num,findmess)==0)return r;r=r->next;}}else if(strcmp(nameornum,"name")==0) /*按姓名查询*/{r=l->next;while(r){if(strcmp(r->,findmess)==0)return r;r=r->next;}}return 0;}float jd(Node *p){int b[3],i;float sum=0.0,a;b[0]=p->data.cgrade;b[1]=p->data.mgrade;b[2]=p->data.egrade;for( i=0;i<=2;i++){if(b[i]>=90) a=5.0 ;else if(b[i]>=85) a=4.5;else if(b[i]>=80) a=4.0;else if(b[i]>=75) a=3.5;else if(b[i]>=70) a=3.0;else if(b[i]>=65) a=2.5;else if(b[i]>=60) a=2.0;else a=0.0 ;sum+=a;}return sum/3;}void Add(Link l) /*增加学生*/{Node *p,*r,*s;char num[11];r=l;s=l->next;while(r->next!=NULL)r=r->next;while(1){k0: printf("请你输入学号(以'0'返回上一级菜单)");scanf("%s",num);getchar();if(strcmp(num,"0")==0)break;while(s){if(strcmp(s->data.num,num)==0){printf("=====>提示:学号为'%s'的学生已经存在,若要修改请你选择'4' 修改!\n",num);printstart();printc();printe(s);printstart();printf("\n");return;}s=s->next;}p=(Node *)malloc(sizeof(Node));strcpy(p->data.num,num);k1: printf("请你输入姓名(以'101'返回主菜单,'102'返回上一级菜单):"); scanf("%s",p->);getchar();//程序暂停等待输入if(strcmp(p->,"101")==0){free(p);return;}else if(strcmp(p->,"102")==0)goto k0;k2:printf("请你输入c语言成绩(以'101'返回主菜单,'102'返回上一级菜单):"); scanf("%d",&p->data.cgrade);getchar();if(p->data.cgrade==101){free(p);//释放内存return;}else if(p->data.cgrade==102)//此处内存不能释放goto k1;//虽然102被输入c语言成绩,但会再次输入将其覆盖k3:printf("请你输入数学成绩(以'101'返回主菜单,'102'返回上一级菜单):"); scanf("%d",&p->data.mgrade);getchar();if(p->data.mgrade==101){free(p);return;}else if(p->data.mgrade==102)goto k2;K4:printf("请你输入英语成绩(以'101'返回主菜单,'102'返回上一级菜单):");scanf("%d",&p->data.egrade);getchar();if(p->data.egrade==101){free(p);return;}else if(p->data.egrade==102)goto k3;p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;p->data.ave=p->data.totle / 3;p->data.ajd=jd(p);/*信息输入已经完成*/p->next=NULL;r->next=p;r=p;shoudsave=1;//为后面改动数据判断做铺垫}}void Qur(Link l) /*查询学生*/{int sel;char findmess[20];Node *p;if(!l->next){printf("\n=====>提示:没有资料可以查询!\n");return;}a0:printf("\n=====>1按学号查找\n=====>2按姓名查找\n");scanf("%d",&sel);if(sel==1)/*学号*/{printf("请你输入要查找的学号(以'0'返回主菜单,'1'返回上一级菜单):"); scanf("%s",findmess);if(strcmp(findmess,"1")==0)goto a0;else if(strcmp(findmess,"0")==0)return;else{p=Locate(l,findmess,"num");if(p){printf("\t\t\t\t查找结果\n");printstart();printc();printe(p);printstart();}elseNofind();}}else if(sel==2) /*姓名*/{printf("请你输入要查找的姓名(以'0'返回主菜单,'1'返回上一级菜单):"); scanf("%s",findmess);if(strcmp(findmess,"0")==0)return;else if(strcmp(findmess,"1")==0)goto a0;else{p=Locate(l,findmess,"name");if(p){printf("\t\t\t\t查找结果\n");printstart();printc();printe(p);printstart();}elseNofind();}}elseWrong();}void Del(Link l) /*删除*/{void Save(Link l);int sel;Node *p,*r,*d=NULL,*j=NULL;char findmess[20],ch;if(!l->next){printf("\n=====>提示:没有资料可以删除!\n");return;}k:printf("\n=====>1按学号删除\n=====>2按姓名删除\n=====>3全部删除\n=====>0返回上一级菜单\n");scanf("%d",&sel);if(sel==0)return;if(sel==3){k1:printf("========》确认全部删除(y/n)?\n");getchar();scanf("%c",&ch);if(ch=='y'){d=l->next;while(d){ j=d;d=d->next;free(j);}l->next=NULL;printf("数据已清空!");Save(l);return ;}else if(ch=='n'){goto k;}else{printf("输入错误!");goto k1;}}if(sel==1){printf("请你输入要删除的学号:");scanf("%s",findmess);p=Locate(l,findmess,"num");if(!p){do{printf("您输入的学号不存在,请重新输入");//当输入学号未找到相应学生时,可以重新输入,而不会跳出当前操作平台scanf("%s",findmess);p=Locate(l,findmess,"num");}while(p==NULL);}if(p){r=l;while(r->next!=p)r=r->next;r->next=p->next;free(p);printf("\n=====>提示:该学生已经成功删除!\n");Save(l);//======shoudsave=1;}}else if(sel==2){printf("请你输入要删除的姓名:");//待改动、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、scanf("%s",findmess);p=Locate(l,findmess,"name");if(!p){do{printf("请重新输入");//当输入学号未找到相应学生时,可以重新输入,而不会跳出当前操作平台scanf("%s",findmess);p=Locate(l,findmess,"name");}while(p==NULL);}if(p){r=l;while(r->next!=p)r=r->next;r->next=p->next;free(p);printf("\n=====>提示:该学生已经成功删除!\n");Save(l);shoudsave=1;}}elseWrong();}void Modify(Link l)//修改学生资料{Node *p;char findmess[20];if(!l->next){printf("\n=====>提示:没有资料可以修改!\n");return;}c0: printf("请你输入要修改的学生学号(以'0'返回主菜单):");scanf("%s",findmess);if(strcmp(findmess,"0")==0)return;p=Locate(l,findmess,"num");if(p){c1: printf("请你输入新的c语言成绩(原来是%d分)(以'101'返回主菜单,'102'返回上一菜单):",p->data.cgrade);scanf("%d",&p->data.cgrade);if(p->data.cgrade==101)return;else if(p->data.cgrade==102)goto c0;c2: printf("请你输入新的英语成绩(原来是%d分)(以'101'返回主菜单,'102'返回上一菜单):",p->data.egrade);scanf("%d",&p->data.egrade);if(p->data.egrade==101)return;else if(p->data.egrade==102)goto c1;printf("请你输入新的高数成绩(原来是%d分)(以'101'返回主菜单,'102'返回上一菜单):",p->data.mgrade);scanf("%d",&p->data.mgrade);if(p->data.mgrade==101)return;else if(p->data.mgrade==102)goto c2;p->data.totle=p->data.cgrade+p->data.egrade+p->data.mgrade;p->data.ave=p->data.totle/3.0;printf("\n=====>提示:资料修改成功!\n");shoudsave=1;}elseNofind();}void Disp(Link l)//显示学生资料{int count=0;Node *p;p=l->next;if(!p){printf("\n=====>提示:没有资料可以显示!\n");return;}printf("\t\t\t\t显示结果\n");printstart();printc();printf("\n");while(p){printe(p);p=p->next;}printstart();printf("\n");}Node *select_order(Node *head,int a)//排序学生资料{Node *first; /*排列后有序链的表头指针*/Node *tail; /*排列后有序链的表尾指针*/Node *p_min; /*保留键值更小的节点的前驱节点的指针*/Node *min; /*存储最小节点*/Node *p; /*当前比较的节点*/float bj;first = NULL;//带存入有序数据的链表while (head != NULL) /*在原链表中找键值最小的节点。