C语言课程设计学生成绩管理系统
C语言课程设计学生成绩管理系统

C语言课程设计学生成绩管理系统在当今数字化的时代,学生成绩管理系统对于学校和教育机构来说至关重要。
它不仅能够提高教学管理的效率,还能为教学决策提供有力的数据支持。
本次 C 语言课程设计的目标就是创建一个功能齐全、操作便捷的学生成绩管理系统。
一、系统需求分析首先,明确系统需要实现的基本功能。
包括学生信息的录入,如姓名、学号等;课程信息的设置,如课程名称、学分等;成绩的录入、修改和查询;以及成绩的统计分析,如计算平均分、排名等。
同时,系统应具备良好的用户界面,操作简单易懂,方便教师和管理人员使用。
对于数据的存储和管理,要保证数据的安全性和完整性,防止数据丢失或被篡改。
二、系统设计(一)数据结构设计选择合适的数据结构来存储学生、课程和成绩信息。
可以使用结构体来定义学生和课程的数据类型,使用数组或链表来存储多个学生和课程的信息。
例如,定义学生结构体如下:```ctypedef struct student {int id;char name50;float scores10; //假设最多 10 门课程} Student;```(二)功能模块设计将系统划分为多个功能模块,如录入模块、查询模块、修改模块、统计模块等。
每个模块负责完成特定的功能,模块之间相互独立,便于代码的维护和扩展。
录入模块负责接收用户输入的学生、课程和成绩信息,并进行合法性检查。
查询模块可以根据用户输入的条件,如学号、姓名、课程名称等,查询相应的学生成绩信息。
修改模块允许用户对已录入的成绩进行修改,但需要进行权限验证。
统计模块用于计算学生的平均分、总分,并进行排名。
(三)界面设计设计简洁明了的用户界面,使用菜单选项让用户选择不同的功能。
可以使用控制台输入输出的方式,也可以考虑使用图形界面库来实现更友好的界面。
三、系统实现(一)数据输入与存储使用文件来存储学生成绩数据,便于数据的持久化。
在程序启动时,读取文件中的数据;在程序结束时,将修改后的数据保存回文件。
C语言课程设计-学生成绩管理系统-完整版

#include<>#include<>#include<>#include<>/* 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;/*入学年*/}stu[N];int num;void panduani(int); /*通过i的值,判断信息要查找的信息是否存在*/ void output(); /*输出学生成绩函数(公共函数)*/void init(); /*系统初始化函数*/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(); /*按单科成绩排序*/void change(int,int); /*交换结构体数组中的两个记录*/ void outputx(int); /*选择输出单科成绩*/void find1(); /*查找界面函数*/int find(char sno[]); /*按学号查找*/int findname(char cname[]);/*按姓名查找*/void findyear(int cyear); /*按入学年查找*/void save(); /*保存文件*/void stop(); /*停顿函数*/void stop() /*停顿函数(公共函数)*/{printf("Press Any Key To Continue...\n");getchar();}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].p ro,stu[i].year);for(j=0;j<5;j++)printf(" %.1f",stu[i].score[j]);printf("\n");}stop();}void init() /*系统初始化函数 */{if(access("",0)) /*判断文件是否存在*/newfile(); /*若不存在,新建数据文件*/elseread1(); /*若存在,读取数据*/}void newfile() /*建立新的数据文件 */{int i;FILE *fp;if((fp=fopen("","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("","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){printf("\n\n\n\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");printf("\t\t\t 请选择:\n");/*请选择:*/c1=getchar();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("姓名:"); /*显示"姓名:"*/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(;;){printf("\n");printf("\t\t\t************************************\n\n");printf("\t\t\t 成绩 \n");printf("\t\t\t 语言 \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");printf("\t请选择要修改的成绩(按 1.2.3.");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语言高数大物电路模电\n");printf("===================================================================\n") ;printf("%s %s %s %s %d",stu[x].no,stu[x].name,stu[x].grade,stu[x].pro,stu[x].year);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);{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("\n\n\n\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* 9. 返回 *\n"); /*返回*/printf("\t\t\t*******************************\n");printf("\t\t\t请选择:\n");/*请选择:*/c2=getchar();getchar();if(c2=='9') break;{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;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 语言 \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");printf("\t请选择:(按1.2.3.");c=getchar();getchar();if(c=='9')break;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* 查找 *\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");/*请选择:*/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);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].p ro,stu[i].year);for(j=0;j<5;j++)printf(" %.1f",stu[i].score[j]);printf("\n");stop();}}void save() /*保存文件*/{int i;FILE *fp;if((fp=fopen("","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");printf("\n\t\t***制作:王清珍,陈超,路梓裕,卢诚知,任卓辉****\n");printf("\n\t\t*************************************************\n");printf("\t\t* 主菜单 *\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=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");/*"选择有误,请重选!"*/ }}}。
C语言课程设计--学生成绩管理系统

*题目七:学生成绩管理系统设计学生成绩信息包括:学期,学号,班别,姓名,四门课程成绩(语文、数学、英语和计算机)等。
主要功能:(1)能按学期、按班级完成对学生成绩的录入、修改(2)能按班级统计学生的成绩,求学生的总分及平均分(3)能查询学生成绩,不及格科目及学生名单(4)能按班级输出学生的成绩单要求:使用二进制文件方式存储数据,系统以菜单方式工作源代码:#include<stdio.h>#include<ctype.h>#include<stdlib.h>#include<string.h>struct Student{int cls;char nam[10];char num[10];int chinese;int english;int computer;int math;}stud1[100],stud2[100];{char a;while(a>'7'||a<'0'){system("cls");printf(" 欢迎使用学生成绩管理系统\n");printf(" 制作人:章建\n");printf("********************** 学生成绩管理系统************************\n");printf(" 1.输入学生成绩\n");printf(" 2.输出学生成绩\n");printf(" 3.查找并显示学生成绩\n");printf(" 4.按姓名查找,修改学生资料\n");printf(" 5.显示所有学生名单\n");printf(" 6.查找并删除学生信息\n");printf(" 7.从文件读取数据\n");printf(" 0.储存学生资料并退出系统\n");printf("********************************************************************* *\n");printf("请选择(0-7)\n");a=getchar();}return(a-'0');}/******************************************************************************int Input(Student stud[],int n) //输入数据(第一学期)。
C语言课程设计—学生成绩管理系统

#include "stdio.h"#include "string.h"#include "stdlib.h"#include "conio.h"#include "string.h"#include "fcntl.h"typedef struct student{int num;char grade[10];char classroom[10];char name[10];float score_math;float score_chinese;float score_english;float average;float sum;}STU;typedef struct Node{STU data;struct Node *next;}*linklist;void menu();char *loginpassword(char password[],int n);//登录验证密码函数声明//linklist createstulist(linklist head); //创建学生链表即学生信息录入函数声明// void printstulist(linklist head); //学生信息输出函数声明//void searchstu_namelist(linklist head); //学生信息查询函数声明(按姓名)// void searchstu_numlist(linklist head); //学生信息查询函数声明(按学号) linklist modifystulist(linklist head); //学生信息修改函数声明//linklist delatestulist(linklist head); //学生信息删除函数声明//void savestulist(linklist head); //学生信息保存到文件函数声明// linklist loadstulist(); //从文件中读取学生信息函数声明// void sortstulist(linklist head); //成绩排名函数(按年级)声明//void sort(STU stu[],int flag); //学生分班函数声明//void sortstuclass(linklist head); //成绩排名函数(按班级)声明////*************************************//void main(){char admin[]="zhangqiong";char password[]="123456";char person[20];char password1[10];int i;printf("************************************************************************* *******\n");printf("\t\t **********欢迎来到学生成绩管理系统**********\n\n");printf("************************************************************************* *******\n\n");printf("\t\t\t\t用户登录\n\n\n\n");for(i=0;i<3;i++){printf("用户名: ");gets(person);fflush(stdin);printf("\n\n\n");loginpassword(password1,10);printf("\n\n\n");if(strcmp(admin,person)==0&&strcmp(password,password1)==0){printf("\t\t\t\t成功登录,亲!\n");printf("\n\n");printf("按任意键继续!");getch();menu();break;}elseprintf("\t用户名或者密码输入错误\n");}if(i==3)printf("\t对不起,您今天输入次数太多,已被强制退出!\n");}//**********************************************************////**********************************************************//char *loginpassword(char password[],int n) //登录密码函数,隐藏密码可见//{int i=0;int m=0;char ch;printf("用户密码:");while((ch=getch())!='\r'&&m<n){password[i++]=ch;printf("*");}password[i]='\0';return password;}//***************************************************//void menu() //主界面函数//{system("cls");linklist L;L=(linklist)malloc(sizeof(Node));L->next=NULL;int ch;do{printf("\t ----------******------------******-----------******----------\n\n");printf("\t\t\t**********学生成绩管理系统***********\n\n");printf("\t ----------******------------******-----------******----------\n\n\n\n\n");printf("\t1.录入学生成绩信息\n\t2.输出学生成绩信息\n\t3.按学号查找学生信息\n\t4.按姓名查找学生信息\n\t5.修改学生信息\n\t6.删除学生信息\n\t7.保存学生信息到文件\n\t8.从文件中读取学生信息\n\t9.年级总成绩排序\n\t10.班级总成绩排序\n\t11.退出\n");printf("\n\n");printf("请输入您要查询的项目:\n");scanf("%d",&ch);switch(ch){case 1:system("cls");createstulist(L);break;case 2:system("cls");printstulist(L);break;case 3: system("cls");searchstu_numlist(L);break;case 4: system("cls");searchstu_namelist(L);break;case 5: system("cls");modifystulist(L);break;case 6: system("cls");delatestulist( L);break;case 7: system("cls");savestulist(L);break;case 8: system("cls");L=loadstulist();break;case 9: system("cls");sortstulist(L);break;case 10: system("cls");sortstuclass(L);break;case 11:system("cls");exit(0);}}while(1);}//************************************//linklist createstulist(linklist L) //录入信息函数// {linklist p,q;char ch;q=L;printf("*******请输入学生信息*******\n\n\n");do{p=(linklist)malloc(sizeof(Node));if(!p){printf("没有多余内存空间\n");return L;}printf("请输入学号:\n");scanf("%d",&p->data.num);printf("请输入姓名:\n");scanf("%s",&p->);printf("请输入年级:\n");scanf("%s",&p->data.grade);printf("请输入班级:\n");scanf("%s",&p->data.classroom);printf("请输入数学成绩:\n");scanf("%f",&p->data.score_math);while(p->data.score_math>100){printf("成绩超过100了,你是猪吗?\n");printf("给老子重新输入:\n");scanf("%f",&p->data.score_math);}printf("请输入语文成绩:\n");scanf("%f",&p->data.score_chinese);while(p->data.score_chinese>100){printf("成绩超过100了,你是猪吗?\n");printf("给老子重新输入:\n");scanf("%f",&p->data.score_chinese);}printf("请输入英语成绩:\n");scanf("%f",&p->data.score_english);while(p->data.score_english>100){printf("成绩超过100了,你是猪吗?\n");printf("给老子重新输入:\n");scanf("%f",&p->data.score_english);}p->data.sum=p->data.score_math+p->data.score_chinese+p->data.score_english; p->data.average=p->data.sum/3;q->next=p;q=p;q->next=NULL;printf("是否要输入下一个学生的信息(Y/N)!");fflush(stdin);ch=getchar();system("cls");}while(ch=='Y'||ch=='y');return(L);}//*****************************************//void printstulist(linklist L) //输出信息函数//{linklist p;p=L->next;if(p==NULL){printf("请先录入学生信息,亲!\n");}elsewhile(p!=NULL){printf("学号姓名年级班级数学成绩语文成绩英语成绩总分平均成绩\n");printf("%6d %3s %2s %2s %4.1f %4.1f %4.1f %4.1f %4.1f\n", p->data.num,p->,p->data.grade,p->data.classroom,p->data.score_math,p->data.score_ chinese,p->data.score_english,p->data.sum,p->data.average);p=p->next;}printf("按任意键继续\n");getch();system("cls");}//*******************************************************//void searchstu_namelist(linklist L) //按姓名查询函数//{linklist p;char str[10];printf("请输入要查询的学生姓名:\n");scanf("%s",str);p=L->next;if(p==NULL){printf("请先录入学生信息\n");}while(p!=NULL){if(strcmp(p->,str)==0){printf("学号姓名年级班级数学成绩语文成绩英语成绩总分平均成绩\n");printf("%6d %3s %2s %2s %4.1f %4.1f %4.1f %4.1f %4.1f\n", p->data.num,p->,p->data.grade,p->data.classroom,p->data.score_math,p->data.score_ chinese,p->data.score_english,p->data.sum,p->data.average);}p=p->next;}printf("按任意键继续\n");getch();system("cls");}//****************************************//void searchstu_numlist(linklist L) //按学号查询函数//{linklist p;int number;printf("请输入要查询的学生学号:\n");scanf("%d",&number);p=L->next;if(p==NULL){printf("请先录入学生信息\n");}while(p!=NULL){if(p->data.num==number){printf("学号姓名年级班级数学成绩语文成绩英语成绩总分平均成绩\n");printf("%6d %3s %2s %2s %4.1f %4.1f %4.1f %4.1f %4.1f\n", p->data.num,p->,p->data.grade,p->data.classroom,p->data.score_math,p->data.score_ chinese,p->data.score_english,p->data.sum,p->data.average);}p=p->next;}printf("按任意键继续\n");getch();system("cls");}//*****************************************************//linklist delatestulist(linklist L) //删除信息函数//{linklist p,q;int number;char ch;printf("请输入要删除的学生学号:\n");scanf("%d",&number);p=L->next;if(p==NULL){printf("请先录入学生信息\n");return NULL;}while(p!=NULL){if(p->data.num==number){printf("学号姓名年级班级数学成绩语文成绩英语成绩总分平均成绩\n");printf("%6d %3s %2s %2s %4.1f %4.1f %4.1f %4.1f %4.1f\n", p->data.num,p->,p->data.grade,p->data.classroom,p->data.score_math,p->data.score_ chinese,p->data.score_english,p->data.sum,p->data.average);printf("确定要删除该学生的信息吗?(Y/N)\n");fflush(stdin);ch=getchar();if(ch=='Y'||ch=='y'){q=L;while(q->next!=p)q=q->next;if(q->next=p){if(p->next==NULL)q->next=NULL;elseq->next=p->next;free(p);printf("已删除该学生的相关信息!\n");return(L);}}elsereturn NULL;}elsep=p->next;}printf("按任意键继续\n");getch();system("cls");}//***************************************//void savestulist(linklist L) //存盘函数//{FILE *fp;linklist p;char outfile[20];printf("请输入你要保存信息的文件名:(例如:D:\\学生管理系统\\student.text)\n");scanf("%s",outfile);if((fp=fopen(outfile,"w"))==NULL){printf("文件打开失败\n");exit(1);}p=L;while(p!=NULL){fwrite(p,sizeof(Node),1,fp);p=p->next;}fclose(fp);printf("信息保存成功!\n");printf("请按任意键继续\n");getch();system("cls");}//*******************************************//linklist loadstulist() //读盘函数// {linklist q,p,L;L=NULL;FILE *fp;char infile[20];printf("请输入要打开的文件名:\n");scanf("%s",infile);if((fp=fopen(infile,"rb"))==NULL){printf("文件打开失败!\n");exit(1);}printf("正在打开文件....\n");p=(linklist)malloc(sizeof(Node));if(!p){printf("无法申请到内存空间");return L;}L=p;while(!feof(fp)){if(fread(p,sizeof(Node),1,fp)!=1){printf("读取信息失败!\n");break;}p->next=(linklist)malloc(sizeof(Node));if(!p->next){printf("无法申请到内存空间");return L;}q=p;p=p->next;}q->next=NULL;fclose(fp);printf("读取成功!\n");return L;}//*************************************************//void sortstulist(linklist L) //年级排序函数// {STU stu[1000];int i=0;int flag=0;linklist p;p=L->next;if(p==NULL){printf("请先录入学生信息,亲!\n");}while(p!=NULL&&i<1000){stu[i]=p->data;i++;p=p->next;flag++;}printf("正在排序.....\n");sort(stu, flag);}//******************************************************// void sort(STU stu[],int flag){int i,j;STU temp;for(i=1;i<flag;i++)for(j=0;j<flag-i;j++){if(stu[j].sum>stu[j+1].sum){temp=stu[j];stu[j]=stu[j+1];stu[j+1]=temp;}}printf("学号姓名年级班级数学成绩语文成绩英语成绩总分平均成绩\n");for(i=flag-1;i>=0;i--)printf("%6d %3s %2s %2s %4.1f %4.1f %4.1f %4.1f %4.1f\n", stu[i].num,stu[i].name,stu[i].grade,stu[i].classroom,stu[i].score_math,stu[i].score_chinese,stu[i].s core_english,stu[i].sum,stu[i].average);printf("按任意键继续!\n");getch();system("cls");}//*****************************************************//void sortstuclass(linklist L) //班级排序函数//{STU stu[1000];int i=0;STU c1[100],c2[100],c3[100],c4[100],c5[100],c6[100],c7[100],c8[100];int flag=0,flag1=0,flag2=0,flag3=0,flag4=0,flag5=0,flag6=0,flag7=0,flag8=0;int j1=0,j2=0,j3=0,j4=0,j5=0,j6=0,j7=0,j8=0;int ch;linklist p;p=L->next;if(p==NULL){printf("请先录入学生信息,亲!\n");}while(p!=NULL&&i<1000){stu[i]=p->data;i++;p=p->next;flag++;}printf("\t1.一班成绩\n\t2.二班成绩\n\t3.三班成绩\n\t4.四班成绩\n\t5.五班成绩\n\t6.六班成绩\n\t7.七班成绩\n\t8.八班成绩\n");printf("请选择你要查询的班级:\n");scanf("%d",&ch);for(i=0;i<flag;i++){if(strcmp(stu[i].classroom,"一班")==0) {c1[j1]=stu[i];j1++;flag1++;}else if(strcmp(stu[i].classroom,"二班")==0) {c2[j2]=stu[i];j2++;flag2++;}else if(strcmp(stu[i].classroom,"三班")==0) {c3[j3]=stu[i];j3++;flag3++;}else if(strcmp(stu[i].classroom,"四班")==0) {c4[j4]=stu[i];j4++;flag4++;}else if(strcmp(stu[i].classroom,"五班")==0) {c5[j5]=stu[i];j5++;flag5++;}else if(strcmp(stu[i].classroom,"六班")==0) {c6[j6]=stu[i];j6++;flag6++;}else if(strcmp(stu[i].classroom,"七班")==0) {c7[j7]=stu[i];j7++;flag7++;}else{c8[j8]=stu[i];j8++;flag8++;}}switch(ch){case 1: sort(c1,flag1);break;case 2: sort(c2,flag2);break;case 3: sort(c3,flag3);break;case 4: sort(c4,flag4);break;case 5: sort(c5,flag5);break;case 6: sort(c6,flag6);break;case 7: sort(c7,flag7);break;case 8: sort(c8,flag8);break;}}//**************************************************************************// linklist modifystulist(linklist L) //修改信息函数//{linklist p;int n,m;float math,chinese,english;char name[10],grade[10],classroom[10];char ch;p=L->next;printf("请输入要修改的学生学号:\n");scanf("%d",&n);while(p!=NULL){if(p->data.num!=n)p=p->next;else{printf("学号姓名年级班级数学成绩语文成绩英语成绩总分平均成绩\n");printf("%6d %3s %2s %2s %4.1f %4.1f %4.1f %4.1f %4.1f\n", p->data.num,p->,p->data.grade,p->data.classroom,p->data.score_math,p->data.score_ chinese,p->data.score_english,p->data.sum,p->data.average);printf("是否要修改该学生的信息?(Y/N)\n");fflush(stdin);ch=getchar();if(ch=='Y'||ch=='y'){printf("请输入该生新的学号:\n");scanf("%d",&m);printf("请输入该生新的姓名:\n");scanf("%s",name);printf("请输入该生新的年级:\n");scanf("%s",grade);printf("请输入该生新的班级:\n");scanf("%s",classroom);printf("请输入该生新的数学成绩:\n");scanf("%f",&math);printf("请输入该生新的语文成绩:\n");scanf("%f",&chinese);printf("请输入该生新的英语成绩:\n");scanf("%f",&english);p->data.num=m;strcpy(p->,name);strcpy(p->data.grade,grade);strcpy(p->data.classroom,classroom);p->data.score_math=math;p->data.score_chinese=chinese;p->data.score_english=english;p->data.sum=p->data.score_math+p->data.score_chinese+p->data.score_english;p->data.average=p->data.sum/3;printf("修改完成!\n");printf("按任意键继续");getch();//return(L);system("cls");return L;}}if(p=NULL)printf("没有找到要修改的学生信息,亲!\n");}printf("按任意键继续");getch();}********************//。
C语言课程设计_学生成绩管理系统

部署步骤:安装 操作系统、安装 数据库、安装应 用软件等
维护方案:定期 备份数据、定期 检查系统、定期 更新软件等
系统维护方案
定期备份数据: 确保数据安全, 防止数据丢失
定期更新系统: 确保系统安全, 防止病毒和恶意 软件攻击
定期检查硬件: 确保硬件正常运 行,防止硬件故 障
定期培训员工: 确保员工熟悉系 统操作,提高工 作效率
06 系统测试与优化
单元测试
目的:验证单个模块或功能的正确 性
测试内容:功能测试、性能测试、 兼容性测试、安全性测试
添加标题
添加标题
添加标题
添加标题
测试方法:白盒测试、黑盒测试、 灰盒测试
测 试 工 具 : JU n it 、 Te s t NG 、 Selenium等
集成测试
目的:验证系统各模块间的接口和交互是否正常 测试方法:黑盒测试、白盒测试、灰盒测试 测试内容:功能测试、性能测试、安全测试、兼容性测试 测试工具:JMeter、Selenium、Appium等
系统性能优化
性能测试:使用自 动化工具进行性能 测试,如JMeter、 LoadRunner等
性能瓶颈分析:分 析性能测试结果, 找出性能瓶颈,如 数据库查询、网络 延迟等
性能优化:针对性 能瓶颈进行优化, 如优化数据库查询 、减少网络延迟等
性能监控:建立性 能监控体系,实时 监控系统性能,及 时发现和解决性能 问题
学生成绩管理系统是一个用 于管理学生成绩的软件系统
Байду номын сангаас
系统采用模块化设计,易于 维护和扩展
系统支持多种数据格式,如 Excel、CSV等,方便数据
导入和导出
系统目标
提高学生成绩管理效率 方便教师查询、统计和分析学生成绩 提供个性化学习建议和指导 促进家校沟通,提高家长对学生成绩的了解
C语言课程设计-学生成绩管理系统

c语言课程设计---学生成绩管理系统

C语言课程设计报告设计题目:学生成绩管理系统设计任务:C语言课程设计任务书及指导书3题目:学生成绩管理系统功能:学生成绩管理系统,每个学生信息为一个记录,包括学号,姓名,性别,3门课程成绩。
系统要求实现以下功能:1、信息录入:录入成绩学生信息(包括学生学号、姓名、性别、3门课程的成绩等);2、信息查询:可以按照姓名或学号查询学生各门课程的成绩,并显示。
3、排序:按平均成绩或各门课程成绩按由高到低进行排序,并显示。
4、信息删除与修改——输入学号,可删除或修改该学生的成绩信息。
5、保存:将相关数据写入磁盘文件,便于存、取操作。
平时:验收:报告:指导教师签名:总评成绩:一、总体设计1.1. 功能模块设计:1.2. 数据结构设计1)自定义的数据类型:struct student{ char num[10]; /* 学号 */char name[20]; /* 姓名*/char sex[4]; /* 性别*/int computer; /* 计算机成绩 */int English; /* 英语成绩 */int math; /* 高数成绩*/};2)文件:设计了student文件,是为了长期保存学生的学号、姓名、性别、计算机成绩、英语成绩、高数成绩等数据。
1.3. 函数原型设计1》void printgaohongbin1()函数功能:用二维数组输出图案无参函数2》void menu()函数功能:输出程序功能菜单二、详细设计2.1.界面设计2.1.1.开始界面%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%学生成绩管理系统设计者:计算机科学与信息工程学院软件工程11103205 高红斌%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%2.1.2登记学生资料的界面2.1.3 删除功能的界面:2.1.3删除学生资料的界面************++++++++++++++***********+++++++++******************* * * +How do you do! * * * * * +1----登记学生资料(register ) * * * * * * +2----删除学生资料(Delete ) * * * * * * +3----查询学生资料(search ) * * * * * * +4----修改学生资料(Update ) * * * * * * +5----保存学生资料(Save ) * * * * * * +6----退出系统 (Exit ) * * * * 欢迎 * * +7----结束语 (good-bye ) * * 欢迎 * ************++++++++++++++***********+++++++++*******************请你选择操作:1请输入学号:11103205 请输入姓名:高红斌 请输入性别:男请输入计算机成绩:86 请输入英语成绩:75 请输入高数成绩:92 请输入学号: (输入0返回上一级菜单)=====》文件已经打开,正在导入记录。
C语言课程设计学生成绩管理系统

#include<stdio.h> //标准输入/输出函数#include<stdlib.h> //标准库函数#include<string.h> //字符串库函数#define TITLE "学生成绩管理系统" //标题文字#define MAX 10#define MENU_MAIN_COUNT 8 //主菜单的选项个数#define MENU_SEARCH_COUNT 4 //查询子菜单的选项个数#define MENU_CALC_COUNT 3 //计算子菜单的选项个数typedef struct student{char name[MAX];char num[MAX];char sex[MAX];int chinese;int mathematic;int english;int computer;struct student* next;}stu;stu *head=NULL;/*主要函数声明*/void input_record(); //输入学生成绩的处理void show_record(); //显示学生成绩的处理void search_record(); //查询学生成绩的处理void update_record(); //更新学生成绩void delete_record(); //删除学生成绩void calculate(); //计算学生成绩void save_to_file(); //保存到文件的处理void exit_system(); //退出系统/*查询子函数声明*/void search_by_id(); //通过学号检索学生的处理void search_by_name();//通过姓名检索学生的处理void search_by_sex(); //通过性别检索学生的处理void search_exit(); //退出子菜单,返回上级菜单/*计算子函数声明*/void calc_total(); //计算总成绩的处理void calc_average(); //计算平均成绩的处理void calc_exit(); //退出子菜单,返回上级菜单/*辅助函数的声明*/void create_stu_by_input(stu* pNewStu); //通过输入为student 赋值stu* get_last_student(stu* p); //找到最后一个学生的记录void clear_record(); //清空所有记录/*显示控制函数声明*/void print_menu_main();void print_menu_title(char* title);void print_table_head();void print_table_row(stu* p);void print_table_buttom();void print_table_head_total();void print_table_row_total(stu* p);void print_table_buttom_total();void print_table_head_avg();void print_table_row_avg(stu* p);void print_table_buttom_avg();/*全局变量声明*/char menu_main[]="|\n""| 1 输入学生成绩\n""| 2 显示学生成绩\n""| 3 查询学生成绩\n""| 4 更新学生成绩\n""| 5 删除学生成绩\n""| 6 计算学生成绩\n""| 7 保存文件\n""| 8 退出系统\n""|\n";/*函数指针数组menu_main_func存储的是主菜单选项中的8个功能函数的地址,分别对应1~8。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信息技术工程学院C语言课程设计报告题目:学生成绩管理系统(student achievement management system)目录一设计目的 (3)二课程设计的内容 (3)三课程设计的要求与数据 (4)四课程设计应完成的工作 (4)五总体设计(包含几大功能模块) (5)六详细设计 (6)6.1各个模块的功能和实现 (6)6.2 流程图 (7)(管理员模式流程图) (7)(来宾模式流程图) (8) (8)七调试分析(各模块测试结果) (9)7.1源代码 (9)7.2 各模块测试结果 (23)八总结 (26)九参考资料 (27)一设计目的通过本课程设计巩固《C语言程序设计》课程的教学成果,深入理解结构体、指针、链表、动态分配内存和文件操作的等C程序设计中的中高级技术,通过课程设计的综合训练,培养学生实际分析问题、编程和动手能力、提高学生利用C 语言进行程序设计的能力,初步培养良好的编程习惯和编程风格,初步学习程序的文档的撰写方法。
二课程设计的内容通过C语言程序系统,设计一个可以对学生的成绩信息进行管理的程序,其中学生的信息可以包括:学号、各科目的成绩的平均分排序等,其功能可以包括学生成绩的输入、输出、查询、排序、删除、统计、退出等。
三课程设计的要求与数据1、用C语言实现系统;2、对学生信息(包括学号、姓名、语文、数学、英语、平均分)进行管理,包括学生成绩的信息输入、输出、查询、删除、排序、统计、退出、显示,以及整个程序的切换登录模式和修改管理员的信息.3、学生信息包括:(1)、每一条记录包括一个学生的学号、姓名、3门课成绩(2)、成绩信息录入功能:(成绩信息用文件保存,可以一次完成若干条记录的输入。
)(3)、成绩信息显示浏览功能:完成全部学生记录的显示。
(4)、查询功能:完成按姓名查找学生记录,并显示。
(5)、成绩信息的删除:按学号进行删除某学生的成绩.(6)、排序功能:按学生平均成绩进行排序。
(7)、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观!四课程设计应完成的工作(1)编写算法;(2)算法测试,并有具体的测试结果和结果分析;(3)撰写课程设计报告。
内容包括:1)封面扉页2)设计任务书3)目录4)总体设计方案(包括流程图)5)使用说明及运行实例(包括界面)6)成员设计内容简介7)项目源程序代码(注意注释的使用)8)指导教师评语五总体设计(包含几大功能模块)1、成绩录入功能2、成绩输出功能3、成绩查询功能4、删除模块5、排序功能6、统计功能7、退出系统六详细设计6.1各个模块的功能和实现(1)整个成绩管理系统设计分为9个模块:1.输入学生成绩2.删除学生成绩3.查询学生成绩4.修改学生成绩5.排序学生成绩6.保存记录7.显示所有8.退出系统9.修改管理员信息(2)(主要函数的功能)1.主函数main():定义学生结构体数组,调用录入,统计等函数对成绩表进行处理。
2.输入数据函数input():输入学号、成绩。
3.排序函数sort():对总成绩或者平均成绩,进行排序,按从高到低或者从低到高。
4.显示数据函数display():显示各个学生的总成绩5.新增数据函数insert():增加学生学生记录。
6.删除数据函数del():由于各种原因,删除某些同学的成绩、学号等。
7.平均值函数average():求各个同学总成绩的平均值。
8.查询数据函数qur():查询学生的信息。
9.保存数据函数save():再一次打开界面是,仍有上次所找的讯息。
10.退出系统函数exit():当要退出整个系统时。
6.2 流程图(管理员模式流程图)(来宾模式流程图)七调试分析(各模块测试结果)7.1源代码#include<stdio.h>#include<string.h>#include<time.h>#include<stdlib.h>#include<conio.h>#define HEADER2 " 学号姓名数学英语C语言总分平均分\n"#define FORMAT " %s %s %d %d %d %d %.2f\n"#define DATA p->data.num,p->,p->data.mgrade,p->data.egrade,p->data.cgrade,p->data.total,p->data .aveint saveflag=0;typedef unsigned short WORD;struct student{char num[10];char name[15];int mgrade;int egrade;int cgrade;int total;float ave;};typedef struct node{struct student data;struct node *next;}Node,*Link;void menu(){time_t now;now=time(NULL);printf(" 学生成绩管理系统\n");printf("\n");printf("*******************************************************************\n");printf(" * *\n");printf(" * 1 输入成绩 2 删除成绩*\n");printf(" * *\n");printf(" * 3 查询成绩 4 修改成绩*\n");printf(" * *\n");printf(" * 5 排序成绩 6 保存记录*\n");printf(" * *\n");printf(" * 7 显示所有0 退出系统*\n");printf(" * *\n");printf("*******************************************************************\n");printf(" * 8 切换登录模式9 修改管理员信息*\n");printf("*******************************************************************\n");printf("\n 请你选择操作命令前的的数字(0~9):");}int menu2(){//int select;time_t now;now=time(NULL);system("cls"); //清屏printf("\n 学生模式\n\n\n");printf(" 学生成绩管理系统\n");printf("\n");printf("*******************************************************************\n");printf(" * *\n");printf(" * 1 查询成绩 2 排序成绩*\n");printf(" * *\n");printf(" * 3 显示所有0 退出系统*\n");printf(" * *\n");printf("*******************************************************************\n");printf(" * 4 切换登录模式*\n");printf("*******************************************************************\n");printf("\n 请你选择操作命令前的数字(0~4):");return 0;}void printheader(){printf(HEADER2);}void printdata(Node *pp){Node *p;p=pp;printf(FORMAT,DATA);}void Wrong(){printf("\n\n\n\n************错误:输入不合法*********\a\n");getch();}void Nofind(){printf("\n没有该学生!!\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)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;}void stringinput(char*t,int lens,char*notice){char n[225];do{printf(notice);scanf("%s",n);if(strlen(n)>lens)printf("\n超出宽度\n");}while(strlen(n)>lens);strcpy(t,n);}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 Disp(Link l){Node *p;system("cls");p=l->next;if(!p){printf("\n目前无学生成绩记录!!\n");getch();return;}printf("\n\n");printheader();while(p){printdata(p);p=p->next;//移至下一个结点}}void Add(Link l){//printf("增加学生记录模块\n");//system("PAUSE");}Node *p,*r,*s;char ch,flag=0,num[10];r=l;system("cls");Disp(l);//先打印已有的学生信息while(r->next!=NULL)r=r->next;//将只指针移至链表末尾,准备添加记录while(1)//一次可输入条记录,直至输入的学号我0的记录节点添加操作{s=l->next;while(1){stringinput(num,10,"学号(按0退出):");flag=0;if(strcmp(num,"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)\a:",num);scanf("%c",&ch);if(ch=='y'||ch=='Y')continue;elsereturn ;}elsebreak;}p=(Node *)malloc(sizeof(Node));strcpy(p->data.num,num);//将字符串mun拷贝到p->data.num中stringinput(p->,15,"name:");p->data.cgrade=numberinput("c语言[0-100]:");p->data.mgrade=numberinput("数学[0-100]:");p->data.egrade=numberinput("英语[0-100]:");p->data.total=p->data.cgrade+p->data.mgrade+p->data.egrade;p->data.ave=(float)(p->data.total/3);p->next=NULL;while(r->next!=NULL)r=r->next;r->next=p;saveflag=1;}}void Del(Link l){// printf("删除学生记录模块\n");//system("PAUSE");int sel;Node *p,*r;char findmess[20];if(!l->next){system("cls");printf("\n======>暂无学生记录!!\n");getch();return;}system("cls");Disp(l);printf("\n 1通过学号删除2通过姓名删除\n");printf(" 请选择[1,2]");scanf("%d",&sel);if(sel==1){stringinput(findmess,10,"请输入学号:");p=locate(l,findmess,"num");if(p){r=l;while(r->next!=p)r=r->next;r->next=p->next;free(p);//释放内存空间printf("\n删除成功!\n");saveflag=1;}elseNofind();}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");saveflag=1;}elseNofind();}elseWrong();getch();}void Qur(Link l){int select;char searchinput[20];Node *p;system("cls");if(!l->next){printf("\n暂无学生记录!!\n");return;}printf("\n=======>1通过学号查找=======>2通过姓名查找\n");printf("请选择[1~2]:");scanf("%d",&select);if(select==1){stringinput(searchinput,10,"请输入要查找的学号:");p=locate(l,searchinput,"num");if(p){printheader();printdata(p);}elseNofind();}else if(select==2){stringinput(searchinput,15,"请输入学生姓名:");p=locate(l,searchinput,"name");if(p){printheader();printdata(p);}elseNofind();}elseWrong();system("PAUSE");}void Modify(Link l){Node *p;char findmess[20];if(!l->next){system("cls");printf("\n没有该学生记录!\n");getch();return;}system("cls");printf("修改学生记录");Disp(l);stringinput(findmess,10,"请输入学号:");p=locate(l,findmess,"num");if(p){printf("学号:%s,\n",p->data.num);printf("姓名:%s,",p->);stringinput(p->,15,"输入新的姓名:");printf("c语言:%d,",p->data.cgrade);p->data.cgrade=numberinput("c语言[0~100]:");printf("数学:%d,",p->data.mgrade);p->data.mgrade=numberinput("数学[0~100]:");printf("英语:%d,",p->data.egrade);p->data.egrade=numberinput("英语[0~100]:");p->data.total=p->data.egrade+p->data.cgrade+p->data.mgrade;p->data.ave=(float)(p->data.total)/3;printf("\n===>修改成功!");saveflag=1;}elseNofind();getch();}void Sort(Link l){Link ll;Node *p,*rr,*s;int i=0;system("cls");if(l->next==NULL){printf("\n暂无学生记录!\n");return;}ll=(Node*)malloc(sizeof(Node));//用于创建新的节点ll->next=NULL;printf("当前状态:\n");Disp(l);system("PAUSE");p=l->next;while(p){s=(Node*)malloc(sizeof(Node));s->data=p->data;s->next=NULL;rr=ll;while(rr->next!=NULL &&rr->next->data.total>=p->data.total){rr=rr->next;}if(rr->next==NULL)rr->next=s;else{s->next=rr->next;rr->next=s;}p=p->next;}l->next=ll->next;p=l->next;while(p!=NULL){i++;p=p->next;}printf("\n******************************\n");Disp(l);saveflag=1;printf("\n ******排序完成******* \n");system("PAUSE");}void Save(Link l){//printf("保存模块\n");//system("PAUSE");FILE *fp;Node *p;int count=0;fp=fopen("student.txt","wb");p=l->next;while(p){if(fwrite(p,sizeof(Node),1,fp)==1){p=p->next;count++;}elsebreak;}if(count>0){printf("\n\n\n\n\n 保存完毕,当前共有%d名学生记录\n",count);saveflag=0;}elseprintf("空文件,保存失败!!\n");fclose(fp);//关闭文件getch();}int login(){FILE *fp1,*fp2;int state;char str1[20],str2[20],str_z[20],str_m[7];if((fp1=fopen("admin.txt","rb"))==NULL){printf("本系统无管理员,请创建!\n\n请输入管理员账号:");scanf("%s",str_z);printf("请设置一个六位数密码:");fp2=fopen("admin.txt","wb");fprintf(fp2,"%s%c",str_z,'\n');fprintf(fp2,"%s%c",str_m,' ');fclose(fp2);}fp1=fopen("admin.txt","rb");fscanf(fp1,"%s",str1);fscanf(fp1,"%s",str2);fclose(fp1);while(1){printf("请选择你的登录方式:\n\n");printf("1.管理员模式0.来宾模式\n");printf("请选择:(0~1)");scanf("%d",&state);if(state==0)return 0;else if(state==1){printf("请输入账号:");scanf("%s",str_z);if (strcmp(str1,str_z)==0&&strcmp(str2,str_m)==0) return 1;else{printf("账号或密码错误\a\n");system("PAUSE");system("cls");}}else{printf("输入不合法\a\n");exit(0);}}}void Modify_admin(){FILE *fp;char str_z[20],str_m[7]="";fp=fopen("admin.txt","wb");printf("请输入管理员账号:");scanf("%s",str_z,'\n');printf("请输入密码:");fprintf(fp,"%s%c",str_z,'\n');fprintf(fp,"%s%c",str_m,' ');fclose(fp);printf("管理员信息更新完毕!! \a\n");getch();}int main(){Link L;FILE *fp;int select,State=0;char ch,admin[20],admin_p[20];int count=0;Node *p,*r;system("color 0A");L=(Node*)malloc(sizeof(Node));L->next=NULL;r=L;fp=fopen("student.txt","ab+");Loop:{State=login();}while(!feof(fp)){p=(Node*)malloc(sizeof(Node));if(fread(p,sizeof(Node),1,fp)==1){p->next=NULL;r->next=p;r=p;count++;}}fclose(fp);if(State==1){while(1){system("cls");printf("\n 管理员模式\n\n");menu();p=r;scanf("%d",&select);if(select==0){if(saveflag==1){getchar();printf("\n记录已修改,是否保存当时记录?(y/n):");scanf("%c",&ch);if(ch=='y'||ch=='Y')Save(L);}printf("谢谢您的使用\n");break;}switch(select){case 1:Add(L);break;//增加模块case 2:Del(L);break;//删除记录case 3:Qur(L);break;//查询模块case 4:Modify(L);break;//修改模块case 5:Sort(L);break;//排序模块case 6:Save(L);break;//保存成绩case 7:Disp(L);system("PAUSE");break;//显示成绩case 8:system("cls");goto Loop;case 9:Modify_admin();break;default:Wrong();getch();break;}}}else{while(1){system("cls");menu2();scanf("%d",&select);if(select==0){printf("谢谢您的使用!!\n");exit(1);}switch(select){case 1:Qur(L);break;case 2:Sort(L);break;case 3:Disp(L);system("PAUSE");break;case 4:system("cls");goto Loop;default:Wrong();getch();break;}}}return 0;}7.2 各模块测试结果八总结本次的课程设计已接近尾声,经过两周的课程设计的学习,让我从中收获了许多的东西,课程开始,由于许多东西的在大一学习C语言时理解不深入,在此次设计中遇到许许多多的问题,调试分析时会出现各种各样的错误,也就需要自己查阅更多的资料。