C语言程序设计课程大作业--成绩管理系统
- 格式:doc
- 大小:42.50 KB
- 文档页数:6
C语言课程设计学生成绩管理系统在当今数字化的时代,学生成绩管理系统对于学校和教育机构来说至关重要。
它不仅能够提高教学管理的效率,还能为教学决策提供有力的数据支持。
本次 C 语言课程设计的目标就是创建一个功能齐全、操作便捷的学生成绩管理系统。
一、系统需求分析首先,明确系统需要实现的基本功能。
包括学生信息的录入,如姓名、学号等;课程信息的设置,如课程名称、学分等;成绩的录入、修改和查询;以及成绩的统计分析,如计算平均分、排名等。
同时,系统应具备良好的用户界面,操作简单易懂,方便教师和管理人员使用。
对于数据的存储和管理,要保证数据的安全性和完整性,防止数据丢失或被篡改。
二、系统设计(一)数据结构设计选择合适的数据结构来存储学生、课程和成绩信息。
可以使用结构体来定义学生和课程的数据类型,使用数组或链表来存储多个学生和课程的信息。
例如,定义学生结构体如下:```ctypedef struct student {int id;char name50;float scores10; //假设最多 10 门课程} Student;```(二)功能模块设计将系统划分为多个功能模块,如录入模块、查询模块、修改模块、统计模块等。
每个模块负责完成特定的功能,模块之间相互独立,便于代码的维护和扩展。
录入模块负责接收用户输入的学生、课程和成绩信息,并进行合法性检查。
查询模块可以根据用户输入的条件,如学号、姓名、课程名称等,查询相应的学生成绩信息。
修改模块允许用户对已录入的成绩进行修改,但需要进行权限验证。
统计模块用于计算学生的平均分、总分,并进行排名。
(三)界面设计设计简洁明了的用户界面,使用菜单选项让用户选择不同的功能。
可以使用控制台输入输出的方式,也可以考虑使用图形界面库来实现更友好的界面。
三、系统实现(一)数据输入与存储使用文件来存储学生成绩数据,便于数据的持久化。
在程序启动时,读取文件中的数据;在程序结束时,将修改后的数据保存回文件。
*题目七:学生成绩管理系统设计学生成绩信息包括:学期,学号,班别,姓名,四门课程成绩(语文、数学、英语和计算机)等。
主要功能:(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语言程序设计课题班级成绩管理系统专业班级学生姓名学号指导老师审批任务书下达日期年月日任务完成日期年月日目录一、引言 (1)二、总体设计 (2)三、详细设计 (4)四、问题分析及总结 (13)五、参考文献 (15)六、附件 (15)一、设计内容与设计要求1. 设计内容:班级成绩管理系统设计涉及的知识点:①掌握并熟练运用C语言的基本数据类型与各种表达式,程序的流程控制语句;②掌握数组的基本概念。
熟练掌握一维数组、二维数组的应用、掌握字符数组与字符串的关系以及字符串的简单处理。
③掌握函数的定义,函数的返回值,函数的调用,函数的形式参数和实际参数之间的关系;掌握变量的作用域与生存期,了解函数的作用域。
④掌握结构体的概念,结构体类型的定义,结构体变量的定义和初始化,结构体成员的表示,结构体变量的赋值含义,结构体与指针、函数的关系。
⑤掌握文件、文件类型指针的基本概念,熟练掌握文件的打开与关闭以及文件的建立、读写等有关操作。
2.设计要求:1)用C语言实现系统;利用结构体数组实现班级成绩的数据结构设计;系统的各个功能模块要求用函数的形式实现;应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观;各项显示数据均要求以表格的形式输出;在各功能子模块中应设计相应的二级菜单。
2) 建立一个班级学生成绩数据库,文件名为bjcjk.txt,并从该文件中读取数据;3) 班级成绩管理系统应能提供以下功能:(1)主菜单界面设计。
通过提示用户输入一个数字选项,调用相应的功能函数。
(2)学生成绩显示:完成班级全部学生成绩的显示,显示时按表格的形式,且应有表头;(3)学生成绩追加:完成新增一个(或多个)学生的成绩记录,要求在追加过程中有相应的提示信息,完成追加后能重新计算学生平均成绩并显示;(4)学生成绩修改:要求能按学号和按姓名两种定位方式,且可以按用户要求修改记录中除学号和姓名以外的指定内容,并重新计算学生的平均成绩;(5)学生成绩信息的查询;要示系统能按学号、按姓名查询以及能查总分在某一指定范围内的学生信息,且能显示符合条件的所的记录,若所需查询的信息不存在时应有相应的提示信息。
//成绩管理系统v2.0#include <stdio.h>#include <stdlib.h>#define N 30void Input (long num[],int score[],int n);void Totalave (int score[],int n);void Scoredes (long num[],int score[],int n,int (*compare)(int a,int b)); int Ascending (int a,int b);void Numas (long num[],int score[],int n);void Search (long num[],int score[],int n,int x);void statistis (long num[],int score[],int n);void List (long num[],int score[],int n);int main(){int n,score[N],c,x,i;long num[N];printf("输入学生人数");scanf("%d",&n);printf("1.Input record\n");printf("2.Caculate totel and average score of course\n");printf("3.Sort in descending order by score\n");printf("4.Sort in ascending order by number\n");printf("5.Search by number\n");printf("6.Statistic analysis\n");printf("7.List record\n");printf("0.Exit\n");printf("Please enter your choice:\n");printf("\n");for(;;){scanf("%d",&c);switch(c){case 1:Input (num,score,n);printf("Please enter your choice:\n");break;case 2:Totalave (score,n);printf("Please enter your choice:\n");break;case 3:Scoredes (num,score,n,Ascending);for(i=0;i<n;i++)printf("ID:%10ld,score:%d\n",num[i],score[i]);//以长整形打印用%ld printf("Please enter your choice:\n");break;case 4:Numas (num,score,n);printf("Please enter your choice:\n");break;case 5:printf("请输入查找学号\n");scanf("%d",&x);Search (num,score,n,x);printf("Please enter your choice:\n");break;case 6:statistis (num,score,n);printf("Please enter your choice:\n");break;case 7:List (num,score,n);Totalave (score,n);printf("Please enter your choice:\n");break;case 0:exit(0);}}return 0;}void Input (long num[],int score[],int n){int i;for(i=0;i<n;i++){printf("Input student's ID and score");scanf("%ld%d",&num[i],&score[i]);}}void Totalave (int score[],int n){int i,sum=0;double ave;for(i=0;i<n;i++)sum=sum+score[i];ave=(double)sum/n;printf("Caculate total=%d,average score of course=%f\n",sum,ave); }void Scoredes (long num[],int score[],int n,int(*compare)(int a,int b)){int i,j,k,t,h;for(i=0;i<n;i++){k=i;for(j=i+1;j<n;j++){if ((*compare)(score[j],score[k]))k=j;}if(i!=k){t=score[k],h=num[k];score[k]=score[i],num[k]=num[i];score[i]=t,num[i]=h;}}}int Ascending (int a,int b){return a<b;}void Numas (long num[],int score[],int n){int i,j,k,t,h;for(i=0;i<n;i++){k=i;for(j=i+1;j<n;j++){if (num[j]<num[k])k=j;}if(i!=k){t=score[k],h=num[k];score[k]=score[i],num[k]=num[i];score[i]=t,num[i]=h;}}for(i=0;i<n;i++)printf("ID:%10ld,score:%d\n",num[i],score[i]);//以长整形打印用%ld }void Search (long num[],int score[],int n,int x){int high=n-1,low=0,mid,c=0,pos,find=0,i,j,k,t,h;for(i=0;i<n;i++){k=i;for(j=i+1;j<n;j++){if (num[j]<num[k])k=j;}if(i!=k){t=score[k],h=num[k];score[k]=score[i],num[k]=num[i];score[i]=t,num[i]=h;}}while(find==0&&low<=high){mid=(high+low)/2;if(x>num[mid])low=mid+1;else if(x<num[mid])high=mid-1;else{pos=mid;find=1;}}if(find==0)printf("not find\n");else{for(i=0;i<n;i++){if(score[i]>score[pos])c++;}printf("ID:%10ld,order:%d,score:%d\n",num[pos],c+1,score[pos]);}}void statistis (long num[],int score[],int n){int a=0,b=0,c=0,d=0,e=0,i;double A,B,C,D,E;for(i=0;i<n;i++){if(score[i]>=90)a++;else if(score[i]>=80)b++;else if(score[i]>=70)c++;else if(score[i]>=60)d++;elsee++;}A=(double)a/n*100;B=(double)b/n*100;C=(double)c/n*100;D=(double)d/n*100;E=(double)e/n*100;printf("优秀人数%d,百分比:%f%%\n",a,A);printf("良好人数%d,百分比:%f%%\n",b,B);printf("中等人数%d,百分比:%f%%\n",c,C);printf("及格人数%d,百分比:%f%%\n",d,D);printf("不及格人数%d,百分比:%f%%\n",e,E); }void List (long num[],int score[],int n){int i;for(i=0;i<n;i++){printf("ID:%10ld,score:%d\n",num[i],score[i]);}}。
#include <stdio.h>#include <math.h>#include <string.h>#define NUM 4struct lhb /定义结构体变量,为lhb/{int num;char name[10];int score[4];float average;}stu[4],s;void save() /定义save函数,把录入的学生数据输出到磁盘list文件中/ {FILE *fp;int i;if((fp=fopen("list","wb"))==NULL){printf("can not open this file\n");return;}for(i=0;i<4;i++)if(fwrite(&stu[i],sizeof(struct lhb),1,fp)!=1) /用fwrite函数将数据送到printf("file write error\n"); list 文件中/fclose(fp);}void file1() /建立菜单1,录入4个学生的4科成绩,并算其平均分/ { int i,j; /定义变量/float s=0;printf("Input the student's number name and 4 score:\n");printf("num name score0 score1 score2 score3\n");for(i=0;i<4;i++)scanf("%d%s%d%d%d%d",&stu[i].num,&stu[i].name,&stu[i].score[0],&stu[i].score[1], &stu[i].score[2],&stu[i].score[3]);for(i=0;i<4;i++) /用for循环算出每个学生的平均成绩/{for(j=0;j<4;j++){s+=stu[i].score[j]; /各科成绩累加后赋给s/stu[i].average=s/4.0;} /计算出平均成绩/s=0;}save(); /调用save函数,保存数据/return;}void file2() /建立菜单2,打印全班学生的数据输出到屏幕上/{FILE *fp; /寻找并调用list文件数据/int i;{ fp=fopen("list","rb");for(i=0;i<4;i++)fread(&stu[i],sizeof(struct lhb),1,fp);fclose(fp);}printf("All the students' message:\n");printf("num name score0 score1 score2 score3 average\n");for(i=0;i<4;i++) /循环输出所有学生数据/printf("%d %s %d %d %d %d %5.2f\n",stu[i].n um,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].average);return;}void file3() /建立菜单3,插入一个学生数据/{FILE *fp; /寻找并调用list文件数据/int i,j,t,n;{ fp=fopen("list","rb");for(i=0;i<4;i++)fread(&stu[i],sizeof(struct lhb),1,fp);fclose(fp);}printf("Plesae input a new student's massage\n");scanf("%d%s%d%d%d%d",&s.num,&,&s.score[0],&s.score[1],&s.score[2],&s.score[3]); s.average=(s.score[0]+s.score[1]+s.score[2]+s.score[3])/4.0;if((fp=fopen("list","r"))==NULL ) /从list文件中读数据/{printf("cant not open the file.");exit(0);}printf(" old students' original data:\n"); /读取已经存在的数据/for(i=0;fread(&stu[i],sizeof(struct lhb),1,fp)!=0;i++){printf("\n%4s%4s",stu[i].num,stu[i].name);for(j=0;j<4;j++)printf("%4d",stu[i].score[j]);printf("%5.2f",stu[i].average);}fclose(fp);n=i; /将i的值赋给变量n/for(t=0;stu[t].average>s.average&&t<n;t++);printf("\n add new student massage:\n"); /向list文件写数据/fp=fopen("list","w");for(i=0;i<t;i++) /先输出平均分高于学生S的学生的成绩/{fwrite(&stu[i],sizeof(struct lhb),1,fp);printf("\n%4s%4s",stu[i].num,stu[i].name);for(j=0;j<4;j++)printf("%4d",stu[i].score[j]);printf("%5.2f",stu[i].average);}fwrite(&s,sizeof(struct lhb),1,fp);printf("\n%4s%4s%4d%4d%4d%4d%%5.2f",s.num,,s.score[0],s.score[1],s.score[2],s.score[3],s.average); /输出学生s的成绩/for(i=t;i<n;i++) /输出平均分低于学生S的学生的成绩/{fwrite(&stu[i],sizeof(struct lhb),1,fp);printf("\n%4s%4s",stu[i].num,stu[i].name);for(j=0;j<4;j++)printf("%4d",stu[i].score[j]);printf("%5.2f",stu[i].average);}fclose(fp); /关闭文件/printf("\n");}void file4() /建立菜单4,按平均成绩的高低输出学生成绩一览表/{int i,j; /定义变量/FILE *fp; /寻找并调用list文件数据/struct lhb t;{ fp=fopen("list","rb");for(i=0;i<4;i++)fread(&stu[i],sizeof(struct lhb),1,fp);fclose(fp);}for(j=0;j<4;j++) /用冒泡排序/for(i=3;i>j;i--)if(stu[j].average<stu[i].average) /比较学生的平均成绩/{t=stu[j];stu[j]=stu[i];stu[i]=t;} /比较后交换/printf("The average from top to buttom:\n");printf("num name score0 score1 score2 score3 average\n");for(i=0;i<4;i++) /再次循环输出排序后的情况/printf("%d %s %d %d %d %d %5.2f\n",stu [i].num,stu[i].name,stu[i].score[0],stu[i].score [1],stu[i].score[2],stu[i].score[3],stu[i].average);}void file5() /建立菜单5,统计平均分底于60的学生,输出其数据/{FILE *fp; /寻找并调用list文件数据/int i;{ fp=fopen("list","rb");for(i=0;i<4;i++)fread(&stu[i],sizeof(struct lhb),1,fp);fclose(fp);}for(i=0;i<4;i++) /用for循环一次/if(stu[i].average<60) /如果条件为真,则进行下列程序/{printf("who's average below 60 is/are:\n");printf("num name score0 score1 score2 score3 average\n");printf("%d %s %d %d %d %d %5.2f\n",stu[i].nu m,stu[i].name,stu[i].score[0],stu[i].score [1],stu[i].score[2],stu[i].score[3],stu[i].average);} return;}void file6() /建立菜单6,输出全班总平均成绩,和全班各科平均成绩/{float v,v1=0,v2=0,v3=0,v4=0; /定义变量,并赋初始值为0/int i,j,s=0;FILE *fp; /寻找并调用list文件数据/{ fp=fopen("list","rb");for(i=0;i<4;i++)fread(&stu[i],sizeof(struct lhb),1,fp);fclose(fp);}for(i=0;i<4;i++)s+=stu[i].average; /各科成绩循环后累加后赋给s/v=s; /将s赋给v/v=v/4.0; /将v的值除于4,在赋给v/for(i=0;i<4;i++)v1+=stu[i].score[0];v1=v1/4.0;for(i=0;i<4;i++)v2+=stu[i].score[1];v2=v2/4.0;for(i=0;i<4;i++)v3+=stu[i].score[2];v3=v3/4.0;for(i=0;i<4;i++)v4+=stu[i].score[3];v4=v4/4.0;printf(" all students' average is %5.2f\n",v); /打印出全班平均成绩/printf("average score[0] is %5.2f\n",v1); /打印出全班各科平均成绩/printf("average score[1] is %5.2f\n",v2);printf("average score[2] is %5.2f\n",v3);printf("average score[3] is %5.2f\n",v4);}void file7() /建立菜单7,查找学生成绩情况/{ int i,c,e;char ch[20];FILE *fp; /寻找并调用list文件数据/{ fp=fopen("list","rb");for(i=0;i<4;i++)fread(&stu[i],sizeof(struct lhb),1,fp);fclose(fp);}printf("Input the student's name to find please press 1\n");printf("Input the student's number to find please press 2\n");scanf("%d",&e); /输入变量/printf("\n");if(e==1) /判断输入变量e==1,如果为真,则进行下面程序/{printf("Input the student's name\n");getchar(); /输入字符型数据/scanf("%s",&ch);for(i=0;i<4;i++)if(strcmp(ch,stu[i].name)==0) /比较判断,如果为真,则打印出相对应成绩/{printf("num name score0 score1 score2 score3 average\n");printf("%d %s %d %d %d %d %5.2f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2 ],stu[i].score[3],stu[i].average);}}if(e==2) /判断输入变量e==2,如果为真,则进行下面程序/ {printf("Input the student's number\n");scanf("%d",&c); /输入学生号数/for(i=0;i<4;i++)if(c==stu[i].num) /判断,如果为真,则打印出相对应成绩/{printf("num name score0 score1 score2 score3 average\n");printf("%d %s %d %d %d %d%5.2f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].average);}}if(e!=1&&e!=2)printf("Y our enter is not correct!\n");return;}main() /定义主函数/{int m;loop: /goto语句返回时的起始处/printf("\n"); /在屏幕上输出菜单表/printf("***********************Student'sScoreSystem *************************\n"); printf("*****************************MUNE *****************************\n"); printf(" Press 1 input student's massage and save them to a list.\n");printf(" Press 2 print all of the students' massage on the screen.\n");printf(" press 3 input add a new student's massage.\n");printf(" Press 4 print student's average from top to buttom on the screen.\n");printf(" Press 5 print who's average below 60 on the screen.\n");printf(" Press 6 print all and each course's average of class on the screen.\n");printf(" Press 7 enter name/number find out one of the students' massage.\n");printf(" Press 0 Exit this system.\n");printf("*******************************************************************\n");printf(" ** Please Input Y our Choice First **\n");scanf("%d",&m); /输入所选菜单/if(m==1) /判断条件,如果为真,则调用菜单1函数/{file1();printf("Do you want to continue this servise Y/N?\n");getchar(); /输入字符型数据/if(getchar()=='y') /判断输入数据是否为真,如果为真,则执行goto语句goto loop;} 否则推出全部程序/ if(m==2){file2();printf("Do you want to continue this servise Y/N?\n");getchar();if(getchar()=='y')goto loop;}if(m==3){file3();printf("Do you want to continue this servise Y/N?\n");getchar();if(getchar()=='y')goto loop;}if(m==4){file4();printf("Do you want to continue this servise Y/N?\n");getchar();if(getchar()=='y')goto loop;}if(m==5){file5();{printf("Do you want to continue this servise Y/N?\n");getchar();if(getchar()=='y')goto loop;}}if(m==6){file6();printf("Do you want to continue this servise Y/N?\n");getchar();if(getchar()=='y')goto loop;}if(m==7){file7();printf("Do you want to continue this servise Y/N?\n");getchar();if(getchar()=='y')goto loop;}if(m==0) /判断条件,如果为真,则退出全部程序/printf("Exit this system\n");}(程序结束)。
移通学院C语言程序设计报告书设计名称:学生成绩管理系统专业:指导老师:班级:姓名:学号:座号:时间一、实验目的1.在编辑应用程序过程中,逐步加深对C语言编程的理解;2.加强实践的能力,动手能力,同时进一步对所学的知识进行巩固;3.培养初步编程的能力,为以后的学习奠定基础;二、实验内容运用所学的C语言知识编辑一个应用程序:学习成绩管理系统三.系统软件环境:本程序主要运行在: Visual C++ 6.0Turbo C/C++ 3.0四.课程设计题目:学生成绩管理系统程序说明:有N个学生,每个学生的数据包含学号不重复、姓名、三门课的成绩及平均成绩,试设计一学生成绩管理系统,使之能提供以下功能:1主菜单2各菜单项功能①成绩录入:输入学生的学号、姓名及三门课的成绩;②成绩查询:按学号查询学生记录;③成绩统计:计算学生的平均分;根据学生的平均分高低,对学生的数据进行排序后输出;④退出系统:退出整个系统即主菜单;五.数据结构设计描述:↓int num; /定义学号,变量为整型/char name; /定义姓名,变量为字符型/int score; /定义课程的成绩,变量为整型/float average; /定义平均分,变量为浮点型/七.系统各函数的功能,、相互调用关系1.函数实现功能说明:1menu函数是定义一个菜单函数,其功能在于输出菜单界面供使用者选择;2input函数是定义用于输入学生信息;3select 函数是定义用于查询学生信息;包括学号、姓名及各科成绩;4statistics 函数计算学生的平均分;根据学生的平均分高低,对学生的数据进行排序输出;2.相互调用关系:Main函数调用menu函数;Menu 函数可以调用input 函数、select函数和statistics 函数八.心得体会C语言是一种较为基础和普遍的编程语言,应用相当广泛,这次课程设计的要求与C语言的广泛应用相比较还有很大的差距;我们对于C语言的理解和使用还处在一个初级的阶段,我们要想掌握它,要学习的还很多,同时要懂得创新,许多的编程方法都是人们一步一步总结出来的,我想我们也要努力拓展自己的思维,努力去寻求新的方法,以创造出更为完善的应用程序; 九.程序:include <stdio.h>include <stdlib.h>include <conio.h>define N 3 /学生人数/define M 3 /课程门数/struct student{int num; /学号/char name20; /姓名/int score3; /三门课成绩/float average;}stuN; /学生数/void input; /查询/void select; /统计/void menu;void input{int i,j;printf"\t\t①成绩录入\n\n";fori=0;i<N;i++{printf"请输入学号:";scanf"%d",&stui.num;printf"请输入姓名:";scanf"%s",&;forj=0;j<M;j++{printf"第%d门成绩的分数:",j+1;scanf"%d",&stui.scorej;}printf"\n\n";}printf"\n\n";printf"输入完毕按任意键返回主菜单";}/2.查询/void selectint no{int i;printf"学生%d号: \n",no; printf"学号: %d\n",stuno-1.num; printf"姓名: %s\n",;for i=0;i<M;i++{printf"第%d门课程的成绩为: ",i+1; printf"%d\n",stuno-1.scorei;}printf"\n按任意键返回主菜单";getch;}/3.统计/void statistics{float temp=0;int i=0;/学生成绩平均分/temp=0;printf"\t\t③成绩统计\n\n";forj=0;j<N;j++{fori=0;i<M;i++{temp=temp+stuj.scorei;}stuj.average=temp/N;printf"\n学生%s的成绩平均成绩为:",;printf"%0.2f分",stuj.average;temp=0;}/排序/for j=0;j<N;j++fori=0;i<N-j-1;i++ifstui.average<stui+1.average{ temp=stui.average;stui.average=stui+1.average;stui+1.average=temp;}printf"\n\n学生平均成绩前三名:";fori=0;i<3;i++{printf"\n第%d名:%0.2f分",i+1,stui.average;}printf"\n\n按任意键返回主菜单";getch;}void menu{ int num=0;int n=0;printf"\n\t\t\t学生成绩管理系统\n\n";printf"\n\t\t\t①成绩录入\n\t\t\t②成绩查询\n\t\t\t③成绩统计\n\t\t\t④退出系统\n";printf"\t\t\tchoose:";scanf"%d",#switchnum{case 1:system"cls";input;break;case 2:system"cls";printf"\t\t②成绩查询\n\n"; printf"请输入要查询的学生号1~3:";scanf"%d",&n;selectn;break;case 3:system"cls";statistics;break;case 4:exit0;default:;}}void main{while1{system"cls"; /清屏/menu;}}。
一、概述C语言作为一种通用的程序设计语言,被广泛应用于计算机科学领域。
在学习和实践C语言程序设计的过程中,学生成绩管理系统是一个常见的项目。
本文将介绍一个C语言程序设计的学生成绩管理系统程序框架,旨在帮助读者了解如何使用C语言来设计一个简单但完整的学生成绩管理系统。
二、程序框架概述1. 程序结构程序将包括主函数和若干辅助函数,用于实现学生成绩的录入、查询、统计和输出功能。
2. 数据结构学生信息将以结构体的形式进行存储,包括学号、尊称、各科成绩等字段。
成绩的存储可以采用数组或链表的方式。
3. 功能模块程序将实现学生成绩的录入、查询、统计和输出功能,其中查询和统计功能可以根据学号或尊称进行。
三、程序设计1. 主函数设计主函数将包括菜单的显示和用户输入的处理,根据用户选择调用相应的辅助函数完成特定功能。
2. 学生信息结构设计设计一个学生信息的结构体,包括学号、尊称、各科成绩等字段,以便于对学生信息进行存储和管理。
3. 辅助函数设计编写若干辅助函数,用于实现学生成绩的录入、查询、统计和输出功能,每个功能对应一个函数。
4. 程序流程设计根据功能模块的设计,将整个程序流程进行设计,包括菜单的显示、用户输入的处理和相应功能函数的调用。
四、程序实现1. 学生信息结构定义定义学生信息的结构体,包括学号、尊称、各科成绩等字段,用于存储学生的相关信息。
2. 学生成绩录入函数实现编写学生成绩录入函数,用于将学生的各科成绩录入到程序中,并将学生信息存储到数组或链表中。
3. 学生成绩查询函数实现编写学生成绩查询函数,可以根据学号或尊称进行查询,并将查询结果输出到屏幕上。
4. 学生成绩统计函数实现编写学生成绩统计函数,可以对学生的各科成绩进行统计,并将统计结果输出到屏幕上。
5. 学生成绩输出函数实现编写学生成绩输出函数,用于将学生的各科成绩和统计结果输出到文件或屏幕上。
五、程序测试1. 输入测试用例编写若干测试用例,包括正常输入和异常输入,以确保程序对各种情况均有正确的处理。
C语言程序设计-学生成绩管理系统C语言课程设计报告课题题目:学生信息管理系统班级:信卓11801姓名:**题目一. 题目: (3)二.设计目的 (3)三.总体设计 (3)四.详细设计 (7)1.动态创建链表 (9)2.排序 (10)3.查询信息 (11)4.修改学生信息 (13)6.输出所有学生的所有数据 (15)7.统计各分数段的人数 (16)五.调试与测试 (17)六.课程设计心得与体会 (24)一.题目:学生信息管理系统要求:从文件中读取原始数据,并将修改后的数据保存在一个新的文件当中。
功能:1.浏览所有学生的所有信息2.用姓名和学号查询学生的信息3.用姓名和学号修改学生的信息4.用姓名和学号删除学生5.统计各个课程分数段的人数6.统计总分和各个课程的最高分、最低分以及对应的姓名二.设计目的如今学校的学生越来越多,成绩管理的工作量越来越大,手工管理成绩的弊端也越来越明显。
随着科学技术的不断提高,计算机科学日渐成熟,它已进入人类社会的各个领域并发挥着越来越重要的作用。
作为计算机应用的一部分,使用计算机对学生档案信息进行管理,具有手工管理所无法比拟的优点。
所以我想借本次课程设计之际,设计一个简易的学生成绩管理系统。
掌握: 1.掌握动态创建链表,并实现对数据的删除,检索,修改。
1.增强工程化意识,提高c语言实践能力。
三.总体设计(1)程序源文件分为:1.student.h 包含所有的头文件以及定义2.function.cpp 实现各个函数的功能3.main.cpp 主函数4.data.txt 学生原始数据(2)主函数实现菜单的选择:使用swicth语句实现菜单的选择1.浏览学生信息2.查询学生信息3.修改学生信息4.删除学生信息5.各科成绩6.最高分最低分以及对应的姓名(3)函数包括:1.struct student * create() //用动态链表建立基础的学生信息库从文件中将学生信息读取出来2.void sort(struct student *head) //排序3.void locatename(struct student *head) //通过姓名查询信息4.void locatenum(struct student *head) //通过学号查询信息5.struct student * delname(struct student *head) //通过姓名删除学生信息6.struct student * delnum(struct student *head) //通过学号删除学生信息7.void changename(struct student *head) //通过姓名去修改学生数据8.void changenum(struct student *head) //通过学号去修改学生数据9.void filein(struct student *head) //保存到文件中10.void print(struct student *head) //打印所有学生信息11.void ABCD(struct student *head) //统计各分段的人数12.void max(struct student * head) //总分以及各个课程的最高分,最低分以及对应的姓名对于创建链表和删除学生这两个函数需要返回head创建链表时返回head:其他函数中都传入了一个参数head那么都可以访问到链表中的所有数据删除学生返回head:当删除第一个学生时,即把头给删了这时需要换头head = delname(head); head= delnum(head);其它函数使用void类型即可四.详细设计使用结构体链表实现上述要求,在头文件中定义结构体,分为数据域和指针域。
#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。
《C语言程序设计》课程大作业
--学生成绩管理系统
一、任务与目的
本大作业要求学生对《学生成绩管理系统》进行分析、设计及编程实现。
要求该系统实现部门级(或班级)成绩管理的常用功能,界面友好。
通过大作业,促使学生专业技能得到综合训练,让学生了解软件开发基本技术和工作过程。
通过本系统的开发,同学要了解软件开发的整个过程,掌握软件开发的基本方法,提前培养同学们从事软件行业应具备的基本素质和能力,为以后的学习作一个铺垫。
二、系统开发步骤
软件开发一般有以下步骤:
1. 问题定义
2. 可行性研究
3. 需求分析(需求分析阶段)
4. 总体设计
5. 详细设计
6. 编码及单元测试
7. 综合测试
8. 软件维护(安装调试阶段)
其中1、2、3步可以整合为调研分析阶段,4、5、6、7步可以整合为项目实施阶段。
根据本次课程设计的实际情况,我们着重进行系统设计和编码实施。
该阶段主要工作有:
1.系统结构的总体设计
决定系统的总体结构,包括整个系统分哪些部分,各部分之间有什么联系以及已确定的需求对这些组成部分如何分配等方面。
2.数据结构定义
定义软件处理的对象——类,定义数据处理流程。
3.详细设计
对各功能模块的功能定义,说明模块之间的调用关系与接口(参数)。
4.编码及调试
根据详细设计的要求,按照统一的要求和编码规范,用JAVA语言编码实现,同时负责每个模块的独立调试。
5.综合测试
软件开发的后期是软件装配和综合测试。
软件测试一般有专业的测试人员,同时通过发布使用试用版(体验版)等方式让用户体验、测试。
在多次测试改进后,才正式发布。
三、系统功能需求描述
管理内容包括:
学号、姓名、班级、五门课成绩。
主要功能有:
添加、修改、删除、读出、写入、查找、排序、计算总分、平均分、分类汇总等。
具体包括:
1. 输入学生的成绩信息,包含学号、姓名、性别等基本信息和各课成绩;
2. 显示全部学生各科成绩信息;
3. 对各科成绩统计分析(总分、平均分、最高分、最低分、及格率等);
4. 统计各科各分数段人数;
5. 按学号或姓名查找并显示某个学生的各科成绩;
6. 按课程成绩或总分由高到低排序显示;
7. 更新某个学生的基本信息或课程成绩;
8. 将学生的成绩信息保存到一个文件中;
9. 读入文件中保存的学生信息。
编写代码,运行程序后,显现下面的参考界面:
成绩管理
============
1.输入学生成绩
2.修改学生成绩
3.删除学生成绩
4.计算每位学生的总分
5.计算每位学生的平均分
6.按学号或姓名查询学生成绩
7.按班级查询学生成绩
8.成绩排序
9.按班级统计学科总分、平均分等
请选择(1~9,0:退出):
选择一个菜单后,显示结果。
四、系统功能模块划分
根据系统功能分析,可将相关功能定义成用相对独立的功能模块,用相应的函数来实现。
在主函数中调用菜单模块,通过菜单选择来调用相应功能模块。
系统功能结构图如下:
为了简单起见,以上功能模块可以全部放在一个层次,通过一个菜单调用。
另外,我们在排序和数据修改时,只需要对某门课程或部分信息操作,在条件查询时,一般可以按学号或姓名查找,这些地方均需要进行功能选择或对象选择,用相应程序模块来实现。
五、C语言程序设计课程设计报告要求
学生在C语言程序设计本大作业完成后,可参考附录中的报告模板,根据下面的内容要求,提交所设计课题的“C语言程序设计本大作业设计报告”,要求打印稿、电子稿(Word 格式)各一份,用A4幅面纸打印。
本课程的C语言程序设计大作业报告应包含以下几个部分:
1.封面
2.摘要、关键词
3.正文
(1)课题综述:课题来源、意义,预期目标,面对的问题,需解决的关键技术等。
(2)需求分析:涉及的知识基础(概述),解决问题的基本思路,
(3)总体方案设计:功能模块框图等。
(4)算法设计:算法描述
....、实现方法、详细流程图
.....等。
(5)代码编写:主要模块的代码分析
.....等。
.........,要有详细的注释
(6)程序调试:调试过程与步骤
.......,发现的问题,解决的办法等。
(7)测试:运行程序,输入测试数据
....,判断是否达到预期目的。
测试数据要有典型意义,要注意临界值的选取,注意测试数据的广泛性和普适性。
(8)结论:理论上发现,技术上创新,方法上改进,还未解决的问题,发展方向,进一步研究等。
4.总结:收获与体会
...。
(必须.....,有实际内容,忌空洞无物,忌千篇一律,400
...字左右
真实的说出自己在课程设计中的切身体会。
例如:如何构思、如何设计、如何编
程、如何调试那些地方使你“痛苦不堪”等等)
5.参考文献:不少于5篇,要与设计课题相关,且确实参考了其中内容。
6.附录:源代码等。
C语言程序设计大作业报告是设计过程与成果的总结,集中反映了同学们的课程理论基础、实践水平及将二者有机结合的能力。
所以,应能体现以下几点要求:
1.报告总字数(不含程序代码等)不少于3000字。
2.模块设计合理、可行。
3.界面美观大方,人机交互方便、简捷。
4.代码精练,可读性好。
5.图文并茂,条理分明。
6.应用结构化程序设计方法进行设计使用,数组、结构体、指针等作为数据结构。
7.源程序编写格式要按照缩进方式,源程序要有详细的注释,使程序容易阅读。
(注:
源程序编写格式的规范和注释体现程序员的素质,必须从本课程开始培养。
)
8.要有用户界面。
要求至少采用文本菜单界面;鼓励采用图形菜单界面。
附件:实验报告封面
北京航空航天大学机械工程及自动化学院
《C语言程序设计》大作业
实验报告
题目:班级成绩管理系统
专业:
班级:
学号:
姓名:组长和组员的名单
成绩:
指导教师:
完成日期:2014年月日。