成绩统计系统c语言
C语言课程设计_学生成绩管理系统
部署步骤:安装 操作系统、安装 数据库、安装应 用软件等
维护方案:定期 备份数据、定期 检查系统、定期 更新软件等
系统维护方案
定期备份数据: 确保数据安全, 防止数据丢失
定期更新系统: 确保系统安全, 防止病毒和恶意 软件攻击
定期检查硬件: 确保硬件正常运 行,防止硬件故 障
定期培训员工: 确保员工熟悉系 统操作,提高工 作效率
06 系统测试与优化
单元测试
目的:验证单个模块或功能的正确 性
测试内容:功能测试、性能测试、 兼容性测试、安全性测试
添加标题
添加标题
添加标题
添加标题
测试方法:白盒测试、黑盒测试、 灰盒测试
测 试 工 具 : JU n it 、 Te s t NG 、 Selenium等
集成测试
目的:验证系统各模块间的接口和交互是否正常 测试方法:黑盒测试、白盒测试、灰盒测试 测试内容:功能测试、性能测试、安全测试、兼容性测试 测试工具:JMeter、Selenium、Appium等
系统性能优化
性能测试:使用自 动化工具进行性能 测试,如JMeter、 LoadRunner等
性能瓶颈分析:分 析性能测试结果, 找出性能瓶颈,如 数据库查询、网络 延迟等
性能优化:针对性 能瓶颈进行优化, 如优化数据库查询 、减少网络延迟等
性能监控:建立性 能监控体系,实时 监控系统性能,及 时发现和解决性能 问题
学生成绩管理系统是一个用 于管理学生成绩的软件系统
Байду номын сангаас
系统采用模块化设计,易于 维护和扩展
系统支持多种数据格式,如 Excel、CSV等,方便数据
导入和导出
系统目标
提高学生成绩管理效率 方便教师查询、统计和分析学生成绩 提供个性化学习建议和指导 促进家校沟通,提高家长对学生成绩的了解
c语言学生成绩管理系统(含源代码)
{int i,j,k;
STU t;
total();
avergescore();
system("cls”);
for(i=0;i<n—1;i++)
{for(k=i,j=i+1;j<n;j++)
if(stu[j].aver>stu[k].aver)
k=j;
if(k!=j)
char name[20];
float score[M];
float aver;
float total;
}STU;
STU stu[N];
int n;
void inputscore(void);
void savescore(void);
void avergescore(void);
void total(void);
printf(”平均分低于60的学生名单\n");
for(i=0;i〈n;i++)
{
if(stu[i].aver〈60)
printf(”%s\n”,stu[i]。name);
}/*统计不及格学生名单*/
}
/***************修改学生成绩*****************/
void modify(void)
printf("菜单\n");
printf("输入成绩-———-----—-————-—-——-—-——-—--—-—————-1\n");
printf(”查看成绩及成绩排序—---—--——-—-———---—--—--———2\n”);
学生成绩管理系统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 语言数据结构课程作品指导老师:学生:学号:班级:一、代码#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语言案例 学生成绩管理系统
课题:学生成绩管理系统 成员:
功能简介
1 增加新生 2 信息查询 3 求每个学生的平均成绩 4 输出每个学生平均成绩的排名情况 5 查看成绩统计
欢迎界面
使用说明
1 输入学生成绩 2 输出学生成绩 3查询学生成绩 4 修改学生成绩 5 查看成绩排序 6 查看成绩统计 7 保存数据 8 读取数据 9 退出系统
输入学生成绩
输入学生的学号,班级,姓名,专业,性别,计算机成绩名,班级,专业进行查询
求每个学生的平均成绩
直接到欢迎界面选择代码就可以
求学生的平均成绩排名
求各个学生平均成绩的排名情况
学生成绩统计
统计学生的各科成绩与平均成绩,此时不 排序
退出系统
学生成绩管理系统基本C语言编写
//代码版权所有,不要#include "stdio.h" #include "stdlib.h" #include "string.h"#include "conio.h" copy,仅供参考学习。
//标准输入输出函数库//标准函数库//字符串函数库//屏幕操作函数库#definep->data.num,p->,p->data.egrade,p->data.mgrade,p->data.cgrade,p->data.total,p->data.a ve,p->data.mingciint saveflag=0; //是否需要存盘的标志变量//定义与学生有关的数据结构typedef structstudent {char num[12]; charname[15]; intcgrade; intmgrade; integrade; int total;float ave; intmingci;}sqlist;//定义每条记录或结点的数据结构,标记为:nodetypedef struct node{struct student data;// 数据域struct node *next; //指针域}Node,*Link; //Node 为node 类型的结构变量,*Link 为node 类型的指针变量void menu() //主菜单{system("cls"); //调用DOS 命令,清屏.与clrscr() 功能相同printf(" \n");printf(" 学生成绩管理信息系统主菜单\n\n");printf(" **************************************************\n");printf(" $ 1、添加记录6、统计记录$\n");printf(" $ 2、删除记录7、排序记录$\n");#define HEADER1 " ***************************学生成绩信息****************************** \n\n"#define HEADER2 " 学号姓名计算机数学英语总分平均分名次\n\n"#define FORMAT " %-10s %-10s %5d %5d %5d %5d %.3f %4d \n" DATA//标记为student//学号//姓名//计算机成绩//数学成绩//英语成绩//总分//平均分//名次}void printheader() // 格式化输出表头{printf(HEADER1);printf(HEADER2);}void printdata(Node *pp) // 格式化输出表中数据{Node* p; p=pp;printf(FORMA T,DA TA);}void Wrong()//输出按键错误信息{printf("\n\n\n\n\n**********Error: 输入错误 !请按任意键继续 !!**********\n"); getchar();}void Nofind()//输出未查找此学生的信息{ printf("\n=====> 未查找此学生的信息 !\n");}void Disp(Link l)//显示单链表 l 中存储的学生记录,内容为 student 结构中定义的内容{Node *p;p=l->next; //l 存储的是单链表中头结点的指针,该头结点没有存储学生信 息,指针域指向的后继结点才有学生信息if(!p) //p==NULL,NUll 在 stdlib 中定义为 0 {printf("\n=====> 无学生的记录 !\n"); getchar(); return;}printf("\n\n"); printheader(); while(p) //逐条输出链表中存储的学生信息{printdata(p); p=p->next;// 移动直下一个结点}getchar(); getchar();}/*作用:用于定位链表中符合要求的节点,并返回指向该节点的指针参数: findmess[] 保存要查找的具体内容 ; nameornum[] 保存按什么查找 ;在单链表 l 中查找 ;*/printf(" $3、 查找记录 8、 保存记录$\n"); printf(" $4、 修改记录 9、 显示记录 $\n"); printf("$5、 插入信息 0、 退出系统 $\n");printf("************************************************ **\n");//输出表格头部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) //若找到findmess 值的学号return r;r=r->next;}}else if(strcmp(nameornum,"name")==0) //按姓名查询{r=l->next;while(r){ if(strcmp(r->,findmess)==0) // 若找到findmess 值的学生姓名return r;r=r->next;}}return 0; // 若未找到,返回一个空指针}//输入字符串,并进行长度验证(长度<lens) void stringinput(char *t,int lens,char *notice) { char n[255]; doprintf(notice); //显示提示信息scanf("%s",n); //输入字符串if(strlen(n)>lens)printf("\n 超出长度范围,重新输入! \n"); // 进行长度校验,超过lens 值重新输入}while(strlen(n)>lens);strcpy(t,n); // 将输入的字符串拷贝到字符串t 中}//输入分数,0< =分数< =100)int numberinput(char *notice){int t=0;do{printf(notice); //显示提示信息scanf("%d",&t); //输入分数if(t>100 || t<0)printf("\n 分数必须在0到100之间! \n"); //进行分数校验}while(t>100 || t<0);return t;}//增加学生记录void Add(Link l){Node *p,*r,*s; //实现添加操作的临时的结构体指针变量char ch,flag=0,num[12];r=l;s=l->next;system("cls");Disp(l); //先打印出已有的学生信息while(r->next!=NULL)r=r->next; //将指针移至于链表最末尾,准备添加记录while(1) //一次可输入多条记录,直至输入学号为0 的记录结点添加操作{while(1) //输入学号,保证该学号没有被使用,若输入学号为0,则退出添加记录操作stringinput(num,12,"\n输入学号(按“0”返回菜单!):"); //格式化输入学号并检验flag=0; if(strcmp(num,"0")==0) // 输入为0,则退出添加操作,返回主界面{return;}s=l->next;while(s) //查询该学号是否已经存在,若存在则要求重新输入一个未被占用的学号{ if(strcmp(s->data.num,num)==0) {flag=1; break;} s=s->next;}if(flag==1) //提示用户是否重新输入{ getchar(); printf("=====> 学号%s 存在,重试?(y/n):",num); scanf("%c",&ch);if(ch=='y'||ch=='Y') continue;elsereturn;}else{ break;}}p=(Node *)malloc(sizeof(Node)); //申请内存空间if(!p){printf("\n 内存空间申请失败! "); // 如没有申请到,打印提示信息return ; //返回主界面} strcpy(p->data.num,num); //将字符串num 拷贝到p->data.num 中stringinput(p->,15," 姓名:");p->data.cgrade=numberinput(" 计算机[0-100]:"); // 输入并检验分数,分数必须在0-100 之间p->data.mgrade=numberinput(" 数学[0-100]:"); //输入并检验分数,分数必须在0-100 之间p->data.egrade=numberinput(" 英语[0-100]:"); //输入并检验分数,分数必须在0-100 之间p->data.total=p->data.egrade+p->data.cgrade+p->data.mgrade; // 计算总分p->data.ave=(float)(p->data.total/3); //计算平均分p->data.mingci=0;r->next=p; // 将新建的结点加入链表尾部中p->next=NULL; // 表明这是链表的尾部结点r=p;saveflag=1;}return ;}//按学号或姓名,查询学生记录void Qur(Link l){int select; //1: 按学号查,2:按姓名查,其他:返回主界面(菜单)char searchinput[20]; //保存用户输入的查询内容Node *p;if(!l->next) //若链表为空{system("cls"); printf("\n=====> 无此学生的记录!\n"); getchar();return;}system("cls");printf("\n =====>1 按学号查询=====>2 按名字查询\n");printf(" 请选择[1,2]:");scanf("%d",&select);if(select==1) //按学号查询{stringinput(searchinput,12," 请输入现有学生的学号:"); p=Locate(l,searchinput,"num");// 在l 中查找学号为searchinput 值的节点,并返回节点的指针if(p){ printheader(); printdata(p); printf(" 按任意键返回!");getchar();}elseNofind(); getchar();}else if(select==2) //按姓名查询{stringinput(searchinput,15," 请输入现有学生的姓名:"); p=Locate(l,searchinput,"name");if(p){ printheader(); printdata(p);printf(" 按任意键返回!"); getchar();}elseNofind(); getchar();}elseWrong();getchar();}//删除学生记录:先找到保存该学生记录的节点,然后删除该节点void Del(Link l){int sel;Node *p,*r;char findmess[20]; if(!l->next){system("cls");printf("\n=====> 无此学生记录!\n");getchar();return;} system("cls");Disp(l);printf("\n =====>1 按学号删除=====>2 按姓名删除\n");printf(" 请选择[1,2]:");scanf("%d",&sel);if(sel==1){stringinput(findmess,12," 请输入现有学生的学号:"); p=Locate(l,findmess,"num");if(p){r=l;while(r->next!=p)r=r->next;r->next=p->next; //将p 所指节点从链表中去除free(p); //释放内存空间printf("\n=====> 删除成功!\n");getchar(); saveflag=1;}elseNofind();getchar();}else if(sel==2) //先按姓名查询到该记录所在的节点{stringinput(findmess,15," 请输入现有学生的姓名"); p=Locate(l,findmess,"name");if(p){r=l;while(r->next!=p)r=r->next;r->next=p->next;free(p); printf("\n=====> 删除成功!\n"); getchar();saveflag=1;}elseNofind(); getchar();}elseWrong();getchar();}}//修改学生记录。
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语言程序设计
#include ”stdio。
h”/*定义学生结构体*/struct Student{ char ID[20]; /*学号*/char Name[20]; /*姓名*/float Mark1; /*数学成绩*/float Mark2; /*程序设计成绩*/float Mark3; /*总分成绩*/float Average; /*平均分*/};/*声明学生数组及学生数量*/struct Student students[1000];int num=0;/*求平均值*/float Avg(struct Student stu){return (stu.Mark1+stu。
Mark2+stu。
Mark3)/3;}/*通过学号返回数组下标*/int Student_SearchByIndex(char id[]){int i;for (i=0;i<num;i++){if (strcmp(students[i].ID,id)==0){return i;}}return —1;}/*通过姓名返回数组下标*/int Student_SearchByName(char name[]){int i;for (i=0;i<num;i++){if (strcmp(students[i]。
Name,name)==0){return i;}}return —1;}/*显示单条学生记录*/void Student_DisplaySingle(int index){printf(”%10s%10s%8s%8s%8s%10s\n”,”学号",”姓名","成绩",”成绩”,”成绩”,"平均成绩”);printf("-—-———-—————--—-——-----——-—---—----—-—-----—--——-——---——-——--\n");printf(”%10s%10s%8.2f%8。
学生成绩管理系统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语言编写学生成绩管理系统
include<>umber;ame;ex;corej;otal=0;forj=0;j<M;j++otal+=stui.scorej;}}}/计算各个同学的平均分/voidavergescorevoid{ inti,j;ver=0;forj=0;j<M;j++ver+=stui.scorej;}stui.aver=stui.aver/M;ver>stuk.averk=j;ifk=j{ t=stuk;stuk=stui;stui=t;}}printf"名次\t学号\t\t姓名\t性别\t高数分\t英语分\tC语言分\t总分\t平均分\n";fori=0;i<n;i++{ printf"%d\t%s\t%s\t%s\t",i+1,stui.number,,stui.sex;forj=0;j<M;j++printf"%\t",stui.scorej;printf"%\t",stui.total;printf"%",stui.aver;printf"\n";}}/通过输入学号查找学生成绩/voidsearchscorevoid{ chara10;umber==0umber,,stui.sex;forj=0;j<M;j++printf"%\t",stui.scorej;printf"%\t",stui.total;printf"%",stui.aver;printf"\n";break; 数\t2.英语\语言\n";scanf"%d",&c1;printf"\t一共有%d个记录\n",M;/总共记录数/switchc1{case1:core0;ifstuk.score0>stui.score0k=i;ifstuj.score0<stui.score0j=i;}average0=sum/M;printf"\t高数的最高分:\n";printf"\t\t学号:%s姓名:%s分数:%.2f\n",stuj.number,,stuj.score0; printf"\t高数的最低分是:\n";printf"\t\t学号:%s姓名:%s分数:%.2f\n",stuk.number,,stuk.score0; printf"\t高数的平均分是%\n",average0;printf"平均分低于60分的学生成员名单\n";fori=0;i<M;i++{ifstui.score0<60printf"%s\n",;}break;case2:core1;ifstuk.score1>stui.score1k=i;ifstuj.score1<stui.score1j=i;}average1=sum/M;printf"\t英语的最高分:\n";printf"\t\t学号:%s姓名:%s分数:%.2f\n",stuj.number,,stuj.score1; printf"\t英语的最低分是:\n";printf"\t\t学号:%s姓名:%s分数:%.2f\n",stuk.number,,stuk.score1; printf"\t英语的平均分是%\n",average1;printf"平均分低于60分的学生成员名单\n";fori=0;i<M;i++{ifstui.score1<60printf"%s\n",;}break;case3:core2;ifstuk.score2>stui.score2k=i;ifstuj.score2<stui.score2j=i;}average2=sum/M;printf"\tC语言的最高分:\n";/最高分/printf"\t\t学号:%s姓名:%s分数:%.2f\n",stuj.number,,stuj.score2;printf"\tC语言的最低分是:\n";/最低分/printf"\t\t学号:%s姓名:%s分数:%.2f\n",stuk.number,,stuk.score2; printf"\tC语言的平均分是%\n",average2;printf"平均分低于60分的学生成员名单\n";fori=0;i<M;i++{ifstui.score2<60printf"%s\n",;}break;printf"输入错误请输入1~3之间的数\n";}sum=0;getchar;printf"是否继续进行统计y/n";getsstr;ifstr0=='y'||str0=='Y'statistic;elsebreak;}}}/修改学生成绩/voidmodifyvoid{chara10;inti,j;system"cls";printf"已经转到修改成绩菜单\n";printf"请输入需要修改成绩的学生学号\n";scanf"%s",a;fori=0;i<n;i++{ ifstrcmpa,stui.number==0{ printf"名次\t学号\t\t姓名\t性别\t高数分\t英语分\tC语言分\t总分\t平均分\n";printf"%d\t%s\t%s\t%s\t",i+1,stui.number,,stui.sex;forj=0;j<M;j++printf"%\t",stui.scorej;printf"%",stui.total;printf"%",stui.aver;printf"\n";printf"请重新输入该学生的姓名:\n";scanf"%%s",stui.number;printf"\n";scanf"%s",;printf"请输入该学生性别\n";scanf"%s",stui.sex;printf"请重新输入该学生成绩:\n";printf"高数分\t英语分\tC语言分\n";forj=0;j<M;j++scanf"%f",&stui.scorej;printf"修改成功\n";break;umber;printf"姓名:\n";scanf"%s",;printf"输入该学生性别\n";scanf"%s",stui.sex;printf"请输入学生成绩:\n";printf"高数分\t英语分\tC语言分\n";forj=0;j<M;j++scanf"%f",&stui.scorej;printf"添加成功\n";}}/删除学生成绩/voiddelscorevoid{inti,j,c;charm,a10;umber==0{ printf"名次\t学号\t\t姓名\t性别\t高数分\t英语分\tC语言分\t总分\t平均分\n";printf"%d\t%s\t%s\t%s\t",i+1,stui.number,,stui.sex;forj=0;j<M;j++printf"%\t",stui.scorej;printf"%\t",stui.total;printf"%",stui.aver;printf"\n";c=i;break;}elseprintf"未找到该学生信息\n";}printf"是否删除该学生成绩y/n\n";scanf"%s",&m;ifm=='y'{fori=c;i<n-1;i++stui=stui+1; //结构体整体赋值将后一位学生成绩信息拷贝进入前一位学生信息的存储位置n=n-1; //删除该学生信息后学生总数减一printf"删除成绩成功\n";}elseprintf"删除成绩失败\n";}/保存学生成绩/voidsavescorevoid{FILEfp;//定义指针inti,flag=1;charm;system"cls";printf"已经转到保存成绩菜单\n";puts"是否保存学生成绩y/n";scanf"%s",&m;ifm=='y'{ iffp=fopen"","wb"==NULL//从文件score中打开{ printf"文件打开失败\n";return;}fori=0;i<n;i++iffwrite&stui,sizeofstructstudent,1,fp=1//学生成绩写入{ printf"保存失败\n";flag=0;}ifflag==1printf"保存成功\n";fclosefp;//界面关闭}elsereturn;}。
用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;}【下载本文档,可以自由复制内容或自由编辑修改内容,更多精彩文章,期待你的好评和关注,我将一如既往为您服务】。
成绩统计系统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语言实现
1. 题目; (1)有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入10个学生数据,要求打印出3门课总平均成绩,以及最高分的学生数据(包括学号、姓名、3门课的成绩、平均分数)。
2. 程序清单;#include<stdio.h>#define N 10struct student{char num[6];char name[8];float score[3];float aver;}stu[N];void main(){int i,j,maxi;float sum,max,average;for (i=0;i<N;i++){printf("please input scores ofsdudent%d:\n",i+1);printf("NO.");scanf("%s",stu[i].num);printf("\nname:");scanf("%s",stu[i].name);for(j=0;j<3;j++){ printf("scores%d:",j+1);scanf ("%f",&stu[i].score[j]);}}average=0;max=0;maxi=0;for (i=0;i<N;i++){ sum=0;for (j=0;j<3;j++)sum+=stu[i].score[j];stu[i].aver=sum/3.0;average+=stu[i].aver;if(sum>max){max=sum;maxi=i;}}average/=N;printf(" No. name score1 score2 score3 average\n");for(i=0;i<N;i++){printf("%5s%10s",stu[i].num,stu[i].name);for(j=0;j<3;j++)printf("%9.2f",stu[i].score[j]);printf(" %9.2f\n",stu[i].aver);}printf ("average=%5.2f\n",average);printf("The highest score is :student%s,%s\n",stu[maxi].num,stu[maxi].name);printf("His scores are:%5.2f %5.2f %5.2f average:%5.2f\n",stu[maxi].score[0],stu[maxi].score[1],stu[maxi].score[2],stu[maxi].aver);}3. 运行结果;4. 对运行情况所作的分析,以及本次调试程序所取得的经验。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
成绩统计系统一目的通过课程设计,加深对《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,退出小工具。