C语言课程设计学生成绩管理系统
C语言课程设计学生成绩管理系统
![C语言课程设计学生成绩管理系统](https://img.taocdn.com/s3/m/43ff2c3f793e0912a21614791711cc7930b77860.png)
C语言课程设计学生成绩管理系统在当今数字化的时代,学生成绩管理系统对于学校和教育机构来说至关重要。
它不仅能够提高教学管理的效率,还能为教学决策提供有力的数据支持。
本次 C 语言课程设计的目标就是创建一个功能齐全、操作便捷的学生成绩管理系统。
一、系统需求分析首先,明确系统需要实现的基本功能。
包括学生信息的录入,如姓名、学号等;课程信息的设置,如课程名称、学分等;成绩的录入、修改和查询;以及成绩的统计分析,如计算平均分、排名等。
同时,系统应具备良好的用户界面,操作简单易懂,方便教师和管理人员使用。
对于数据的存储和管理,要保证数据的安全性和完整性,防止数据丢失或被篡改。
二、系统设计(一)数据结构设计选择合适的数据结构来存储学生、课程和成绩信息。
可以使用结构体来定义学生和课程的数据类型,使用数组或链表来存储多个学生和课程的信息。
例如,定义学生结构体如下:```ctypedef struct student {int id;char name50;float scores10; //假设最多 10 门课程} Student;```(二)功能模块设计将系统划分为多个功能模块,如录入模块、查询模块、修改模块、统计模块等。
每个模块负责完成特定的功能,模块之间相互独立,便于代码的维护和扩展。
录入模块负责接收用户输入的学生、课程和成绩信息,并进行合法性检查。
查询模块可以根据用户输入的条件,如学号、姓名、课程名称等,查询相应的学生成绩信息。
修改模块允许用户对已录入的成绩进行修改,但需要进行权限验证。
统计模块用于计算学生的平均分、总分,并进行排名。
(三)界面设计设计简洁明了的用户界面,使用菜单选项让用户选择不同的功能。
可以使用控制台输入输出的方式,也可以考虑使用图形界面库来实现更友好的界面。
三、系统实现(一)数据输入与存储使用文件来存储学生成绩数据,便于数据的持久化。
在程序启动时,读取文件中的数据;在程序结束时,将修改后的数据保存回文件。
C语言课程设计-学生成绩管理系统-完整版
![C语言课程设计-学生成绩管理系统-完整版](https://img.taocdn.com/s3/m/9665376867ec102de2bd8993.png)
#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语言课程设计--学生成绩管理系统
![C语言课程设计--学生成绩管理系统](https://img.taocdn.com/s3/m/6332046565ce050877321318.png)
*题目七:学生成绩管理系统设计学生成绩信息包括:学期,学号,班别,姓名,四门课程成绩(语文、数学、英语和计算机)等。
主要功能:(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语言课程设计—学生成绩管理系统
![C语言课程设计—学生成绩管理系统](https://img.taocdn.com/s3/m/812d86e40975f46527d3e1c4.png)
#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语言课程设计_学生成绩管理系统
![C语言课程设计_学生成绩管理系统](https://img.taocdn.com/s3/m/85c964c385868762caaedd3383c4bb4cf7ecb7ad.png)
部署步骤:安装 操作系统、安装 数据库、安装应 用软件等
维护方案:定期 备份数据、定期 检查系统、定期 更新软件等
系统维护方案
定期备份数据: 确保数据安全, 防止数据丢失
定期更新系统: 确保系统安全, 防止病毒和恶意 软件攻击
定期检查硬件: 确保硬件正常运 行,防止硬件故 障
定期培训员工: 确保员工熟悉系 统操作,提高工 作效率
06 系统测试与优化
单元测试
目的:验证单个模块或功能的正确 性
测试内容:功能测试、性能测试、 兼容性测试、安全性测试
添加标题
添加标题
添加标题
添加标题
测试方法:白盒测试、黑盒测试、 灰盒测试
测 试 工 具 : JU n it 、 Te s t NG 、 Selenium等
集成测试
目的:验证系统各模块间的接口和交互是否正常 测试方法:黑盒测试、白盒测试、灰盒测试 测试内容:功能测试、性能测试、安全测试、兼容性测试 测试工具:JMeter、Selenium、Appium等
系统性能优化
性能测试:使用自 动化工具进行性能 测试,如JMeter、 LoadRunner等
性能瓶颈分析:分 析性能测试结果, 找出性能瓶颈,如 数据库查询、网络 延迟等
性能优化:针对性 能瓶颈进行优化, 如优化数据库查询 、减少网络延迟等
性能监控:建立性 能监控体系,实时 监控系统性能,及 时发现和解决性能 问题
学生成绩管理系统是一个用 于管理学生成绩的软件系统
Байду номын сангаас
系统采用模块化设计,易于 维护和扩展
系统支持多种数据格式,如 Excel、CSV等,方便数据
导入和导出
系统目标
提高学生成绩管理效率 方便教师查询、统计和分析学生成绩 提供个性化学习建议和指导 促进家校沟通,提高家长对学生成绩的了解
C语言课程设计-学生成绩管理系统
![C语言课程设计-学生成绩管理系统](https://img.taocdn.com/s3/m/881b286c1ed9ad51f01df23d.png)
c语言课程设计---学生成绩管理系统
![c语言课程设计---学生成绩管理系统](https://img.taocdn.com/s3/m/e701be790b1c59eef8c7b442.png)
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语言课程设计学生成绩管理系统
![C语言课程设计学生成绩管理系统](https://img.taocdn.com/s3/m/65dd6d0990c69ec3d5bb7568.png)
#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。
c语言课程设计报告学生成绩管理系统
![c语言课程设计报告学生成绩管理系统](https://img.taocdn.com/s3/m/edf4c28c5ff7ba0d4a7302768e9951e79b89699b.png)
c语言课程设计报告学生成绩管理系统一、教学目标本课程旨在让学生掌握C语言的基本语法和编程技巧,通过实现一个学生成绩管理系统,培养学生运用C语言解决实际问题的能力。
具体目标如下:1.知识目标:–掌握C语言的数据类型、运算符、控制结构、函数等基本语法。
–理解结构体和文件操作等相关知识。
2.技能目标:–能够运用C语言编写简单的程序。
–学会使用C语言实现数据的输入、输出和处理。
–掌握使用结构体创建学生成绩数据结构,并实现对成绩的增删改查等操作。
3.情感态度价值观目标:–培养学生对编程的兴趣,增强自信心。
–培养学生的团队协作能力和解决问题的能力。
二、教学内容本课程的教学内容主要包括C语言的基本语法、数据结构、文件操作等。
具体安排如下:1.C语言基本语法:数据类型、变量、运算符、控制结构、函数等。
2.数据结构:结构体、数组、指针等。
3.文件操作:文件的打开、关闭、读写等。
4.学生成绩管理系统:实现一个学生成绩管理系统,包括学生的增删改查、成绩的排序、统计等功能。
三、教学方法本课程采用讲授法、案例分析法和实验法相结合的教学方法。
1.讲授法:用于讲解C语言的基本语法和概念。
2.案例分析法:通过分析实际案例,让学生学会运用C语言解决实际问题。
3.实验法:让学生动手实践,编写程序,培养实际编程能力。
四、教学资源1.教材:《C程序设计语言》或《C语言入门教程》。
2.参考书:《C Primer Plus》、《C语言编程思想》等。
3.多媒体资料:教学PPT、视频教程等。
4.实验设备:计算机、网络等。
五、教学评估本课程的评估方式包括平时表现、作业、考试等。
评估方式应客观、公正,能够全面反映学生的学习成果。
具体安排如下:1.平时表现:占课程总评的30%,包括课堂参与度、提问回答、小组讨论等。
2.作业:占课程总评的30%,包括课后练习、编程作业等。
3.考试:占课程总评的40%,包括期中考试和期末考试。
六、教学安排本课程的教学安排如下:1.教学进度:按照教材的章节进行教学,确保在有限的时间内完成教学任务。
C语言课程设计 学生成绩管理系统
![C语言课程设计 学生成绩管理系统](https://img.taocdn.com/s3/m/abb084ff04a1b0717fd5dd5b.png)
#include <stdio.h>#include <malloc.h>#include <string.h>#include <stdlib.h>typedef struct student /*定义一个单链表*/ {char sno[10];char name[10];int Chinese;int Math;int English;int sum;float avg;struct student *next;}student1,*grade;grade get_info(grade L) //输入学生信息{student1 *s,*p=NULL,*q;int flag,n,i;char choice='Y';while(choice!='N'&&choice!='n'){printf("\n请输入要录入的学生个数:");scanf("%d",&n);for(i=1;i<=n;i++){s=(student1 *)malloc(sizeof(student1));printf("\n请输入学生的学号:\n");scanf("%s",&s->sno);printf("\n请输入学生的姓名:\n");scanf("%s",&s->name);printf("\n请输入学生的语文成绩:\n");scanf("%d",&s->Chinese);printf("\n请输入学生的数学成绩:\n");scanf("%d",&s->Math);printf("\n请输入学生的英语成绩:\n");scanf("%d",&s->English);s->sum=s->Chinese+s->Math+s->English;s->avg=(float)s->sum/3;if(L!=NULL){q=L;p=L;while(q){flag=strcmp(q->sno,s->sno);if(flag==0){printf("该学生已存在!\n");break;}q=q->next;}if(flag!=0){while(p->next) p=p->next;p->next=s;p=s;s->next=NULL; /*尾结点的指针置空,下同!*/}}else{L=s;s->next=NULL;}}printf("\n是否继续?(Y/N或y/n):");scanf("%s",&choice);system("cls");}return L;}sno_select(grade L) /*按学生学号查找*/{student1 *p=L;char num[10],choice='Y';int i=1,flag;while(choice!='N'&&choice!='n'){printf("\n请输入该学生的学号:");scanf("%s",&num);while(p){flag=strcmp(p->sno,num);if(flag==0){printf("\n*************************************************************\n");printf("\t学号\t姓名\t语文\t数学\t英语\t总分\t平均分\n");printf("\t%s\t%s\t%d\t%d\t%d\t%d\t%.2f\n",p->sno,p->name,p->Chinese,p->Math,p->English,p->sum,p->avg);printf("***************************************************************\n");break;}else p=p->next;}if(flag) printf("\n不存在该学号的学生!\n\n");printf("继续查找?(Y/N或y/n):");scanf("%s",&choice);system("cls");}return 0;}grade_select(grade L) /*按分数段查询*/{int n,m,j,k=0,x=0,y=0;char choice='Y';student1 *p=L;while(choice!='N'&&choice!='n'){printf("\n可查找的科目的菜单如下:\n");printf("\t 1.语文 2.数学 3.英语\n");printf("请选择(输入序号即可):");scanf("%d",&j);printf("\n请输入一个分数段,即输入n,m的值(n<m):");scanf("%d%d",&n,&m);printf("\n*************************************************************\n");printf("\t学号\t姓名\t语文\t数学\t英语\t总分\t平均分\n");while(p){if(j==1){x=1;y=1;if(p->Chinese>=n&&p->Chinese<=m){printf("\t%s\t%s\t%d\t%d\t%d\t%d\t%.2f\n",p->sno,p->name,p->Chinese,p->Math,p->English,p->sum,p->avg);k=1;}}if(j==2){k=1;y=1;if(p->Math>=n&&p->Math<=m){printf("\t%s\t%s\t%d\t%d\t%d\t%d\t%.2f\n",p->sno,p->name,p->Chinese,p->Math,p->English,p->sum,p->avg);x=1;}}if(j==3){k=1;x=1;if(p->English>=n&&p->English<=m){printf("\t%s\t%s\t%d\t%d\t%d\t%d\t%.2f\n",p->sno,p->name,p->Chinese,p->Math,p->English,p->sum,p->avg);}}p=p->next;}printf("\n*************************************************************\n");if(L==NULL) printf("该系统还没有存放数据!\n\n");else{if(k==0) printf("没有学生的语文成绩在这个分数段上\n\n");if(x==0) printf("没有学生的数学成绩在这个分数段上\n\n");if(y==0) printf("没有学生的英语成绩在这个分数段上\n\n");}k=0;x=0;y=0;printf("继续查找?(Y/N或y/n):");scanf("%s",&choice);system("cls");}}statistics(grade L) /*统计函数*/{student1 *p=L;int i=0;char choice='N';float all_avg=0;while(choice!='Y'&&choice!='y'){while(p){all_avg=all_avg+p->avg;p=p->next;i++;}printf("\n===================================================\n");printf("该班级总人数为:%d\n",i);if(L==NULL) printf("该班级的平均分为:0\n");else printf("该班级的平均分为:%5.2f\n",all_avg/i);printf("===================================================\n");printf("\n退出?(Y或y):");scanf("%s",&choice);}system("cls");}grade delete_grade(grade L) /*删除指定学生成绩函数*/{student1 *p=L,*q=L;int i=1,flag;char choice='Y',num[10];while(choice!='N'&&choice!='n'){printf("\n===================================================\n");if(L==NULL) printf("该系统中不存在任何数据\n\n");else{printf("\n请输入想要删除的学生学号:");scanf("%s",&num);while(p){flag=strcmp(p->sno,num);if(flag==0){if(q==p){L=q->next;free(q);}else{while(q->next!=p) q=q->next;q->next=p->next;free(p);}break;}p=p->next;}if(flag) printf("\n不存在该学生");else printf("\n删除成功!");printf("\n===================================================\n");}p=L;q=L;printf("继续删除?(Y/N或y/n):");scanf("%s",&choice);system("cls");}return L;}asc_order_grade(grade L) /*升序排序函数*/{int k,x=1,n=0,m,y;float z;student1 *p,*q,*s=L;char t[10],choice;while(s) /*计算链表数据个数n*/{s=s->next;n++;}while(x){choice='N';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("****************************************\n");printf("请选择(输入菜单序号即可):");scanf("%d",&k);system("cls");if(k==1) /*按语文成绩升序排序*/{while(choice!='Y'&&choice!='y'){for(m=0;m<n-1;m++){p=L;while(p->next){q=p->next;if(p->Chinese>=q->Chinese){strcpy(t,p->sno); /*学号交换*/strcpy(p->sno,q->sno);strcpy(q->sno,t);strcpy(t,p->name); /*学号交换*/strcpy(p->name,q->name);strcpy(q->name,t);y=p->Chinese; /*语文成绩交换*/p->Chinese=q->Chinese;q->Chinese=y;y=p->Math; /*数学成绩交换*/p->Math=q->Math;q->Math=y;y=p->English; /*英语成绩交换*/p->English=q->English;q->English=y;y=p->sum; /*总成绩交换*/p->sum=q->sum;q->sum=y;z=p->avg; /*平均成绩交换*/p->avg=q->avg;q->avg=z;}p=p->next;}}p=L;printf("\n按语文成绩升序排序的最终结果为:\n");printf("\n*************************************************************\n");printf("\t学号\t姓名\t语文\t数学\t英语\t总分\t平均分\n");while(p){printf("\t%s\t%s\t%d\t%d\t%d\t%d\t%.2f\n",p->sno,p->name,p->Chinese,p->Math,p->English,p->sum,p->avg);p=p->next;}printf("\n*************************************************************\n");printf("\n\n");printf("退出?(Y或y)");scanf("%s",&choice);system("cls");}}else if(k==2) /*按数学成绩升序排序*/{while(choice!='Y'&&choice!='y'){for(m=0;m<n-1;m++){p=L;while(p->next){q=p->next;if(p->Math>=q->Math){strcpy(t,p->sno); /*学号交换*/strcpy(p->sno,q->sno);strcpy(q->sno,t);strcpy(t,p->name); /*学号交换*/strcpy(p->name,q->name);strcpy(q->name,t);y=p->Chinese; /*语文成绩交换*/p->Chinese=q->Chinese;q->Chinese=y;y=p->Math; /*数学成绩交换*/p->Math=q->Math;q->Math=y;y=p->English; /*英语成绩交换*/p->English=q->English;q->English=y;y=p->sum; /*总成绩交换*/p->sum=q->sum;q->sum=y;z=p->avg; /*平均成绩交换*/p->avg=q->avg;q->avg=z;}p=p->next;}}p=L;printf("\n按数学成绩升序排序的最终结果为:\n");printf("\n*************************************************************\n");printf("\t学号\t姓名\t语文\t数学\t英语\t总分\t平均分\n");while(p){printf("\t%s\t%s\t%d\t%d\t%d\t%d\t%.2f\n",p->sno,p->name,p->Chinese,p->Math,p->English,p->sum,p->avg);p=p->next;}printf("\n*************************************************************\n");printf("\n\n");printf("退出?(Y或y)");scanf("%s",&choice);system("cls");}}else if(k==3) /*按英语成绩升序排序*/{while(choice!='Y'&&choice!='y'){for(m=0;m<n-1;m++){p=L;while(p->next){q=p->next;if(p->English>=q->English){strcpy(t,p->sno); /*学号交换*/strcpy(p->sno,q->sno);strcpy(q->sno,t);strcpy(t,p->name); /*学号交换*/strcpy(p->name,q->name);strcpy(q->name,t);y=p->Chinese; /*语文成绩交换*/p->Chinese=q->Chinese;q->Chinese=y;y=p->Math; /*数学成绩交换*/p->Math=q->Math;q->Math=y;y=p->English; /*英语成绩交换*/p->English=q->English;q->English=y;y=p->sum; /*总成绩交换*/p->sum=q->sum;q->sum=y;z=p->avg; /*平均成绩交换*/p->avg=q->avg;q->avg=z;}p=p->next;}}p=L;printf("\n按英语成绩升序排序的最终结果为:\n");printf("\n*************************************************************\n");printf("\t学号\t姓名\t语文\t数学\t英语\t总分\t平均分\n");while(p){printf("\t%s\t%s\t%d\t%d\t%d\t%d\t%.2f\n",p->sno,p->name,p->Chinese,p->Math,p->English,p->sum,p->avg);p=p->next;}printf("\n*************************************************************\n");printf("\n\n");printf("退出?(Y或y)");scanf("%s",&choice);system("cls");}}else if(k==4) /*按总成绩升序排序*/ {while(choice!='Y'&&choice!='y'){for(m=0;m<n-1;m++){p=L;while(p->next){q=p->next;if(p->sum>=q->sum){strcpy(t,p->sno); /*学号交换*/strcpy(p->sno,q->sno);strcpy(q->sno,t);strcpy(t,p->name); /*学号交换*/strcpy(p->name,q->name);strcpy(q->name,t);y=p->Chinese; /*语文成绩交换*/p->Chinese=q->Chinese;q->Chinese=y;y=p->Math; /*数学成绩交换*/p->Math=q->Math;q->Math=y;y=p->English; /*英语成绩交换*/p->English=q->English;q->English=y;y=p->sum; /*总成绩交换*/p->sum=q->sum;q->sum=y;z=p->avg; /*平均成绩交换*/p->avg=q->avg;q->avg=z;}p=p->next;}}p=L;printf("\n按总成绩升序排序的最终结果为:\n");printf("\n*************************************************************\n");printf("\t学号\t姓名\t语文\t数学\t英语\t总分\t平均分\n");while(p){printf("\t%s\t%s\t%d\t%d\t%d\t%d\t%.2f\n",p->sno,p->name,p->Chinese,p->Math,p->English,p->sum,p->avg);p=p->next;}printf("\n*************************************************************\n");printf("\n\n");printf("退出?(Y或y)");scanf("%s",&choice);system("cls");}}else if(k==5) /*按平均绩升序排序*/{while(choice!='Y'&&choice!='y'){for(m=0;m<n-1;m++){p=L;while(p->next){q=p->next;if(p->avg>=q->avg){strcpy(t,p->sno); /*学号交换*/strcpy(p->sno,q->sno);strcpy(q->sno,t);strcpy(t,p->name); /*学号交换*/strcpy(p->name,q->name);strcpy(q->name,t);y=p->Chinese; /*语文成绩交换*/p->Chinese=q->Chinese;q->Chinese=y;y=p->Math; /*数学成绩交换*/p->Math=q->Math;q->Math=y;y=p->English; /*英语成绩交换*/p->English=q->English;q->English=y;y=p->sum; /*总成绩交换*/p->sum=q->sum;q->sum=y;z=p->avg; /*平均成绩交换*/p->avg=q->avg;q->avg=z;}p=p->next;}}p=L;printf("\n按平均成绩升序排序的最终结果为:\n");printf("\n*************************************************************\n");printf("\t学号\t姓名\t语文\t数学\t英语\t总分\t平均分\n");while(p){printf("\t%s\t%s\t%d\t%d\t%d\t%d\t%.2f\n",p->sno,p->name,p->Chinese,p->Math,p->English,p->sum,p->avg);p=p->next;}printf("\n*************************************************************\n");printf("\n\n");printf("退出?(Y或y)");scanf("%s",&choice);system("cls");}}else if(k==6){system("cls");break;}else printf("请输入正确的序号!!\n\n");}}void menu() /*菜单函数*/{printf("\t\t|----------------------------------------|\n");printf("\t\t| 欢迎进入学生成绩管理系统|\n");printf("\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| 5.删除指定学生成绩|\n");printf("\t\t| 6.成绩升序排序|\n");printf("\t\t| 7.退出|\n");printf("\t\t|****************************************|\n"); }int main(){int i=10;grade L=NULL;while(i!=8){menu();printf("根据菜单,请输入想要执行的功能的数字代号:");scanf("%d",&i);system("cls");switch(i){case 1:L=get_info(L);break;case 2:sno_select(L);break;case 3:grade_select(L);break;case 4:statistics(L);break;case 5:L=delete_grade(L);break;case 6:asc_order_grade(L);break;case 7:printf("\n\n\t\t\t谢谢使用!\n\n\t\t\t 再见!\n");break;default:printf("请输入正确的序号!!\n\n");}}}。
C语言课程设计 学生成绩管理系统
![C语言课程设计 学生成绩管理系统](https://img.taocdn.com/s3/m/74e2a00959eef8c75fbfb392.png)
东华大学C语言课程设计报告书班级:通信1403姓名:学号:指导老师:廖小飞2015-1-2学生成绩管理系统1.功能需求分析该系统(学生成绩管理系统)可实现对学生基本信息及成绩的管理,用户根据提示输入10个学生及5门课程的相关信息后,可调用以下功能:(1)求出每名学生的平均成绩和总成绩。
(2)求出每门课程的平均分、及格率、最高成绩和最低成绩。
(3)输出总成绩前5名的学生学号、各科成绩和总分。
(4)输出各科补考学生的学号和成绩。
系统给用户提供了一个简单的人机界面,使用户可以根据提示输入操作项,调用系统提供的管理功能。
主要功能需求描述如下:1.系统主控平台允许用户选择想要的操作,通过输入相应序号选择相应操作。
2.添加信息用户根据提示输入5门课程的名称,10个学生的学号及各科成绩。
3.计算计算学生的平均分、总分,课程的平均分、及格率、最高分、最低分等。
4.排名根据学生总成绩进行排序,并输出前5名的学生的相关信息。
5.筛选筛选出每门课程成绩小于60分的学生,并输出相应信息。
6.退出退出系统。
2.总体设计2.1功能模块设计1.系统界面提供一个简单的人机界面,使用户可以根据提示输入操作项。
首先调用print_menu_title()函数显示系统的标题。
然后,打印出目录,并按一定格式显示,引导用户进行选择。
最后,读取用户输入的选项,调用相应的功能模块。
2.输入课程及学生信息在主菜单中选择1时,调用input_score()函数,输入课程及学生信息。
首先建立一个二维字符型数组和一个结构体数组,分别用来存放用户输入的课程名称和学生信息。
输入完毕后返回主菜单界面。
3.计算学生总分和平均分主菜单中选择2的时候计算学生的总分和平均分。
调用stu_ave()函数,先后计算学生的总分、平均分。
然后,调用print_table_head_ave()函数显示计算总分、平均分结果的表头。
再将计算结果按一定格式打印在屏幕上。
最后,调用print_table_buttom_ave()函数显示计算结果的表尾。
C语言课程设计--学生成绩管理系统
![C语言课程设计--学生成绩管理系统](https://img.taocdn.com/s3/m/a439259d6529647d2728524f.png)
中国地质大学C语言课程设计院系:工程学院姓名:、、俊学号:班号: 051163指导老师:日期: 2016-12-4目录一、题目要求二、需求分析三、总体设计四、详细设计1.菜单函数和主函数2.各功能模块设计(1)输入模块(2)追加模块(3)修改模块(4)删除模块(5)修改成绩模块(6)排序模块(7)浏览模块3.公共函数(1)保存函数(2)加载函数(3)学号输入函数(4)输入三科成绩函数(5)求总分函数(6)输入一个记录的函数(7)修改成绩函数(8)修改记录函数(9)显示数据结构项目函数(10)显示一个记录的函数五、上机操作六、总结学生成绩管理系统一.题目要求对在校某班学生几门课程的考试成绩进行统一管理。
每个学生记录包括学号、姓名、年龄、数学、英语、物理成绩,默认以学号为序存放。
(1)建立一个文件,以班为单位存储学生记录。
(2)将允许的操作分为四种,以A、B、C、D、E、F为标志(若设置菜单操作更佳):A:插入一个新的学生记录(录入学生信息);B:修改学生记录;C:删除一个学生记录;D:登记成绩;E:修改成绩;F:浏览全班成绩。
(3)计算学生的总成绩。
(4)按学号排序输出全班成绩表。
二.需求分析学生记录用文件存储,因而要提供文件的输入、输出等操作;要实现插入一个新生的学生记录,因而要提供文件的插入操作;要实现学生记录的修改和删除,以及登记成绩修改成绩,因而要提供文件记录的修改和删除操作;要浏览全班成绩,故要提供显示操作;计算学生总成绩需要提供简单的统计操作;要按学号排序输出全班成绩表,因而要提供排序操作;另外还应提供键盘式选择菜单实现功能选择。
三.总体设计根据上面的需求分析,可以将这个系统的设计分为8个模块,数据输入,添加数据,修改数四.详细设计1.菜单函数和主函数将各个功能模块设置为菜单选项,方便调用,且执行完每部分功能模块后能够方便返回到系统界面.[流程图]void menu() /*主界面*/{int w1;char n; /*.变量n保存选择菜单数字,w1判断输入的数字是否在功能菜单对应数字范围*/ do{puts("\t\t****************MENU****************\n\n");puts("\t\t\t\tA.Enter new data");puts("\t\t\t\tB.Addition data");puts("\t\t\t\tC.Modify data");puts("\t\t\t\tD.Delete data");puts("\t\t\t\tE.Modify score");puts("\t\t\t\tF.Order by number");puts("\t\t\t\tG.Browse all");puts("\t\t\t\tH.Exit");puts("\n\n\t\t************************************\n");printf("Choice your number(A-H):[ ]\b\b");n=getchar();printf("\n");if(n<'A'||n>'H') w1=1; /*对选择的数字作判断*/else w1=0;}while(w1==1);switch(n) /*选择功能*/{case 'A':enter();break; /*输入模块*/case 'B':add();break; /*添加模块*/case 'C':modify();break; /*修改数据模块*/case 'D':del ();break; /*删除模块*/case 'E':modify_score();break; /*修改成绩模块*/case 'F':order();break; /*排序模块*/case 'G':browse();break; /*浏览模块*/case 'H':exit(0); /*退出模块*/}}main() /*主函数*/{menu();}2.各功能模块设计(1) 输入模块[数据分析]单看各数据信息,学号﹑年龄以及数学﹑英语﹑物理各科成绩和总分均是整型,姓名可以采用字符型数组.数据信息存放在文件中,一条记录对应一个学生,既符合习惯也方便信息管理.把学生的学号﹑姓名﹑年龄﹑各科成绩及总分作为结构体成员,存放若干个学生信息就用结构体数组.struct student{int num;char name[20];int age;int Math;int English;int Physical;long int sum;}stu[N];/*stu[N]中每个数组元素对应一个学生*/[注意]stu[N] 中的N为学生个数,程序中采用宏定义的方式,可以随时在源程序宏定义中修改,本程序宏定义#define N 30[流程图][程序]/**********************输入模块********************/void enter() /*输入模块*/{int i,n;printf("How many students(1-%d)?:",N);scanf("%d",&n); /*要输入的记录个数*/printf("\nEnter data now\n\n");for(i=0;i<n;i++){printf("\n Input %dth student record.\n",i+1);input(i); /*调用输入函数*/}if(i!=0) save(n); /*调用保存函数*/printf_back(); /*一个任务结束时让用户选择是浏览还是返回*/}(2)追加模块[需求分析]该模块的功能是用户需要增加新的学生记录, 请从键盘输入并逐条写到原来的输入文件中.[流程图][程序]/***************************添加模块**************************/void add() /*添加模块*/{int i,n,m,k;FILE *fp;n=load();printf("How many students are you want to add(1-%d)?:",N-n);scanf("%d",&m); /*输入要添加的记录个数*/k=m+n;for(i=n;i<k;i++){printf("\n Input %dth student record.\n",i+1);input(i); /*调用输入函数*/}if((fp=fopen("score.txt","ab"))==NULL) /*以ab方式打开文件,添加保存*/{printf("Cannot open file.\n");}for(i=n;i<k;i++) /*输出到文件*/if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)printf("file write error.\n");fclose(fp);printf_back(); /*一个任务结束时的选择浏览还是返回*/}(3)修改模块[需求分析]该模块的功能是显示所有学生信息,考虑到记录很多,故采用分屏显示。
C课程设计学生成绩管理系统
![C课程设计学生成绩管理系统](https://img.taocdn.com/s3/m/96dd2abef71fb7360b4c2e3f5727a5e9856a2734.png)
系统功能模块设计
课程管理模块:课程添加、 修改、删除等
成绩管理模块:成绩录入、 修改、查询等
统计分析模块:成绩统计、 成绩分析等
用户管理模块:用户注册、 登录、修改密码等
系统设置模块:系统参数设 置、系统日志管理等
Part Five
系统实现
系统开发环境与工具
开发语言:Java 开发工具:Eclipse 数据库:MySQL
单击添加章节标题
Part Two
系统概述
系统的目标与功能
目标:提高学生成绩管理效率,方便教师 和学生查询成绩
功能:成绩录入、成绩查询、成绩统计、 成绩分析、成绩排名等
系统的用户群体
学生:查询个人成绩、查看课程安排、提交作业等 教师:发布课程信息、查看学生成绩、布置作业等 管理员:管理用户权限、维护系统数据、统计分析等 家长:了解孩子学习情况、与教师沟通等
C课程设计学生成绩管理 系统
,a click to unlimited possibilities
汇报人:
目录
01 添 加 目 录 项 标 题 03 系 统 需 求 分 析 05 系 统 实 现 07 总 结 与 展 望
02 系 统 概 述 04 系 统 设 计 06 系 统 评 估 与 优 化
Part One
可扩展性:系统在增加用户或负载时, 性能的变化情况
用户体验:用户对系统的满意度和易用 性评价
系统优化建议与方案
性能优化:提 高系统响应速 度,优化数据
库查询效率
用户体验优化: 简化界面设计, 提高用户操作
便捷性
功能优化:增 加用户自定义 功能,满足个
性化需求
安全性优化: 加强数据加密 和访问控制, 确保数据安全
c语言课程设计学生成绩管理系统
![c语言课程设计学生成绩管理系统](https://img.taocdn.com/s3/m/be6934ccdc88d0d233d4b14e852458fb770b388b.png)
c语言课程设计学生成绩管理系统一、课程目标知识目标:1. 理解C语言编程的基本概念,掌握数据类型、变量、运算符、控制结构等基础知识。
2. 学习使用数组、函数和指针等C语言特性进行程序设计。
3. 掌握文件操作,实现对数据的保存和读取。
技能目标:1. 能够运用C语言编写学生成绩管理系统的各个功能模块,如录入、查询、修改和删除成绩。
2. 培养学生运用结构体处理复杂数据结构的能力。
3. 提高学生分析问题、设计程序、调试程序和解决问题的能力。
情感态度价值观目标:1. 培养学生认真负责、细心严谨的学习态度,养成良好的编程习惯。
2. 激发学生创新意识,鼓励合作交流,提高团队协作能力。
3. 培养学生面对挫折和困难时,保持积极心态,勇于克服问题。
本课程针对高年级学生,结合C语言课程知识,以学生成绩管理系统为实际案例,注重理论与实践相结合。
在教学过程中,充分考虑学生的认知特点,由浅入深,逐步引导学生掌握C语言编程技能,培养实际编程能力。
课程目标明确,分解为具体学习成果,便于教学设计和评估。
通过本课程的学习,使学生能够独立完成学生成绩管理系统的设计与实现,提高编程水平和实践能力。
二、教学内容1. C语言基础知识回顾:数据类型、变量、常量、运算符、表达式、控制结构(条件语句、循环语句)。
相关教材章节:第一章至第三章。
2. 函数与数组:函数定义、调用、传参;一维数组、二维数组的应用。
相关教材章节:第四章、第六章。
3. 指针与结构体:指针的概念、操作;结构体的定义、初始化、使用。
相关教材章节:第七章、第八章。
4. 文件操作:文件打开、关闭、读写操作;文件存储结构。
相关教材章节:第十章。
5. 学生成绩管理系统设计与实现:a. 功能需求分析:录入、查询、修改、删除成绩。
b. 数据结构设计:学生信息结构体、成绩结构体、链表或数组实现。
c. 功能模块实现:各功能模块的详细设计与编程实现。
d. 系统测试与调试:单元测试、集成测试、性能优化。
c语言课程设计报告学生成绩管理系统
![c语言课程设计报告学生成绩管理系统](https://img.taocdn.com/s3/m/9413608cb04e852458fb770bf78a6529657d3548.png)
c语言课程设计报告学生成绩管理系统一、课程目标知识目标:1. 学生能理解并掌握C语言基础,包括变量定义、数据类型、运算符、控制结构等。
2. 学生能运用C语言实现学生成绩管理系统的基本功能,如添加、删除、修改、查询学生成绩。
3. 学生了解并掌握文件操作在C语言中的应用,实现对数据的持久化存储。
技能目标:1. 学生能够运用结构体数组管理大量数据,培养数据组织和管理的实际操作能力。
2. 学生通过编程实践,掌握模块化编程方法,提高代码的复用性和可维护性。
3. 学生通过团队协作,培养沟通与协作能力,共同完成学生成绩管理系统的设计与实现。
情感态度价值观目标:1. 学生通过解决实际问题,培养对编程的兴趣,激发探究精神。
2. 学生在团队协作中,学会尊重他人意见,培养合作精神,提高解决问题的信心。
3. 学生认识到编程在生活中的实际应用,增强对计算机科学的认识和热爱。
课程性质:本课程为实践性较强的学科,结合C语言编程知识,以项目驱动的方式进行教学。
学生特点:学生为高中一年级学生,已具备一定的计算机操作能力,对编程有一定了解,但实际操作经验不足。
教学要求:教师需引导学生掌握C语言基础知识,注重实践操作,鼓励学生主动探究、团队协作,培养解决实际问题的能力。
在教学过程中,将课程目标分解为具体的学习成果,以便进行有效的教学设计和评估。
二、教学内容根据课程目标,教学内容分为以下三个部分:1. C语言基础知识:- 变量定义、数据类型、常量与变量- 运算符、表达式、语句- 控制结构:顺序、选择、循环- 函数的定义与调用- 指针与数组2. 学生成绩管理系统功能实现:- 结构体的定义与使用- 结构体数组操作- 系统功能模块划分:添加、删除、修改、查询学生成绩- 函数调用关系分析,实现模块化编程3. 文件操作与数据持久化:- 文件打开、关闭、读写操作- 学生成绩数据的存储与读取- 文件错误处理与异常处理教学大纲安排:第一周:C语言基础知识复习,学习结构体和结构体数组第二周:学生成绩管理系统功能设计,编写添加、删除、修改、查询功能的代码第三周:文件操作学习,实现学生成绩数据的持久化存储,优化系统性能第四周:项目测试、调试与优化,总结交流教学内容与教材关联性:本教学内容与教材《C语言程序设计》相关章节紧密关联,涵盖第3章至第6章的知识点,以及第8章文件操作部分。
C语言课程设计-学生成绩管理系统
![C语言课程设计-学生成绩管理系统](https://img.taocdn.com/s3/m/42d2eedb195f312b3169a5de.png)
学生成绩管理系统目录第一章、设计任务分析 (2)1.1目标 (2)1.2要求 (2)1.3学生成绩管理系统的功能 (2)第二章、模块设计 (3)2.1主模块 (3)2.2初始化模块 (3)2.3输入记录 (3)2.4从表中删除记录 (4)2.5显示所有记录 (4)2.6按照姓名查找 (4)2.7保存记录到文件 (4)2 8从文件中读入记录 (4)2.9 计算所有学生的总分和平均分 (4)2.10插入记录到表中 (5)2.11复制文件 (5)2.12排序 (5)2.13追加记录到文件 (5)2.14索引 (5)2.15分类合计 (5)第三章、主要数据结构 (6)第四章、流程图 (7)第五章、源代码 (8)第六章、测试情况 (22)6.1登陆页面如图6-1所示 (22)6.2输入学生信息数据页面如图6-2所示 (23)6.3删除记录页面如图6-3所示 (24)6.4查找全部记录页面如图6-4所示 (25)6.6保存文件页面如图6-6所示 (27)6.7读文件页面如图6-7所示 (28)6.8计算总分和平均分页面如图6-8所示 (29)6.9插入记录页面如图6-9所示 (30)6.10复制文件如图6-10所示 (31)6.12追加记录页面如图6-12 (33)6.13索引成功页面如图6-13所示 (34)6.14分类合计页面如图6-14 (35)第一章、设计任务分析1.1目标(1)掌握和利用C语言进行程序设计的能力。
(2)理解和运用结构化程序设计的思想和方法。
(3)掌握开发一个小型实用系统的基本方法。
(4)学会调试一个较长程序的基本方法。
(5)掌握书写程序设计开发文档的能力(书写课程设计报告)。
1.2要求(1)用C语言实现系统。
(2)利用结构体数组实现学生成绩的数据结构设计。
(3)系统具有增加、查询、插入、排序等基本功能。
(4)系统的各个功能模块要求用函数的形式实现。
(5)完成设计任务并书写课程设计报告。
- 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语言时理解不深入,在此次设计中遇到许许多多的问题,调试分析时会出现各种各样的错误,也就需要自己查阅更多的资料。