c语言课程设计报告书--学生成绩管理

合集下载

C语言程序设计学生成绩管理系统课程设计分析报告

C语言程序设计学生成绩管理系统课程设计分析报告
fsca nf(fp,"S no:%d\n",&example[SavePos].S no);
fsca nf(fp,"Score(DS)%lf\n",&example[SavePos].dDataStruct);
fsca nf(fp,"Score(M)%lf\n",&example[SavePos].dMath);
}CStude nt;
2.1. 2 ma in()主函数
主函数功能比较简单,用
while
循环语句和switch多重选择语句来显示主界面和
调用函数。在主函数的前面要写必须的头文件,预定义语句以及全局变量的结构体
2.1.3del()删除函数
在C语言中无法做到删除和移动数据,所以删除记录要先将所有记录从文件中读出, 删除后再将记录写回文件中。每读出一条记录,按其在文件中的顺序做好指针链接关系, 然后查处要删除的学生信息,将其在链表中删除,最后再将变动的记录重新写回文件中。 用指针,else/if结构来实现查找出要删除的学生。
:完成全部学生或满足指定条件记录的显示。
:完成按学号或姓名查找学生记录,并显示。
:按学生学号或平均成绩进行排序。
:按学生学号或平均成绩高低插入一条学生记录。
:将学生记录保存在自定义名称的文件中。
:将保存在文件中的学生记录读取出来。
本菜单来调用各个功能。
进 度 要 求
7
1.布置设计题目,讲解要求和说明201499
4、系统的各个功能模块都用函数的形式来实现;
5、要求能将学生成绩信息保存在文件中;
6、要求能从文件中读取学生信息并进行相关处理。
设 计 参 数
1、每一条记

C语言课程设计报告_学生成绩简单管理程序

C语言课程设计报告_学生成绩简单管理程序

C语言课程设计报告_学生成绩简单管理程序1.系统菜单的主要功能(1)输入若干条记录(2)显示所有记录(3)按学号排序(4)插入一条记录(5)按姓名查找,删除一条记录(6)查找并显示一条记录(7)输出统计信息(新增)(8)从正文中添加数据到结构体数组中(9)将所有数据写入文件中(0)退出程序2.题目分析该题主要考察学生对结构体,指针,文件的操作,以及C语言算法的掌握,所以完成此道题目要求较强的设计能力,尤其是要有一种大局观的意识。

如何调程序也非常重要,通过这个程序可以学习到以前调试短程序没有的的经验。

菜单中的每一个选项都对应一个子程序,子程序的算法几乎囊获了所有C语言学过的技巧,下面就各个子程序中的功能进行说明:功能1和4的算法相似,输入一条记录到结构体中去,其中有一部很关键,就是通过gets将所有的多余的字符,回车读去,否则就会出错。

功能2是显示所有的记录,通过循环输出,格式也比较重要。

功能3为按学号排序,因为学号定义成了字符数组的形式,因此在运用冒泡法进行排序的时候,要用到strcmp,strcpy等函数。

功能5为按姓名删除记录,先输入姓名,再一一比较,如果没有则返回失败信息,如果找到就将此记录都向前移一位,返回n-1。

功能6的算法在5中就已经体现了,输入姓名,一一比较。

功能7为新增的功能,因为考虑到原来给出的函数中竟然没有对学生成绩的统计功能,因此新增此功能,可以得出所有的记录个数,最高、最低、平均分,并输出相关的学生信息等。

功能8和9是对文件的操作,提前准备好数据。

3.感受学了将近一个学期的C语言了,说实话,挺疲惫的,特别是最后的课设,调得好烦。

但现在想想收获也不小,以前高中学VB的时候,一直觉得计算机语言挺简单的,现在看来当时根本没有接触到计算机语言的精髓。

看到了自己做出的这个小程序,挺自豪的,以前一直以为做出一个软件一样的程序是遥不可及的事情。

我选择的是第二个程序,因为自我觉得它涉及面更广,把以前学过的算法几乎都过了一遍。

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

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

C语言程序设计学生成绩管理系统学院计算机与软件学院班级姓名学号一、系统菜单的主要功能(1)输入若干条记录(2)显示所有记录(3)按学号排序(4)插入一条记录(5)按姓名查找,删除一条记录(6)查找并显示一条记录(7)输出统计信息(新增)(8)从正文中添加数据到结构体数组中(9)将所有数据写入文件中(0)退出程序二、题目分析该题主要考察学生对结构体,指针,文件的操作,以及C语言算法的掌握,所以完成此道题目要求较强的设计能力,尤其是要有一种大局观的意识。

如何调程序也非常重要,通过这个程序可以学习到以前调试短程序没有的的经验。

菜单中的每一个选项都对应一个子程序,子程序的算法几乎囊获了所有C语言学过的技巧,下面就各个子程序中的功能进行说明:功能1和4的算法相似,输入一条记录到结构体中去,其中有一部很关键,就是通过gets将所有的多余的字符,回车读去,否则就会出错。

功能2是显示所有的记录,通过循环输出,格式也比较重要。

功能3为按学号排序,因为学号定义成了字符数组的形式,因此在运用冒泡法进行排序的时候,要用到strcmp,strcpy等函数。

功能5为按姓名删除记录,先输入姓名,再一一比较,如果没有则返回失败信息,如果找到就将此记录都向前移一位,返回n-1。

功能6的算法在5中就已经体现了,输入姓名,一一比较。

功能7为新增的功能,因为考虑到原来给出的函数中竟然没有对学生成绩的统计功能,因此新增此功能,可以得出所有的记录个数,最高、最低、平均分,并输出相关的学生信息等。

功能8和9是对文件的操作,提前准备好数据。

三、程序正文部分#include<stdio.h> /*引用库函数*/#include<stdlib.h>#include<ctype.h>#include<string.h>typedef struct /*定义结构体数组*/{char num[10]; /*学号*/char name[20]; /*姓名*/int score; /*成绩*/}Student;Student stu[80]; /*结构体数组变量*/int menu_select() /*菜单函数*/{char c;do{system("cls"); /*运行前清屏*/printf("/t/t****Students' Grade Management System****/n"); /*菜单选择*/printf("/t/t | 1. Input Records |/n");printf("/t/t | 2. Display All Records |/n");printf("/t/t | 3. Sort |/n");printf("/t/t | 4. Insert a Record |/n");printf("/t/t | 5. Delete a Record |/n");printf("/t/t | 6. Query |/n");printf("/t/t | 7. Statistic |/n");printf("/t/t | 8. Add Records from a Text File|/n");printf("/t/t | 9. Write to a Text file |/n");printf("/t/t | 0. Quit |/n");printf("/t/t*****************************************/n"); printf("/t/t/tGive your Choice(0-9):");c=getchar(); /*读入选择*/}while(c<'0'||c>'9');return(c-'0'); /*返回选择*/}int Input(Student stud[],int n) /*输入若干条记录*/{int i=0;char sign,x[10]; /*x[10]为清除多余的数据所用*/while(sign!='n'&&sign!='N') /*判断*/{ printf("/t/t/tstudent's num:"); /*交互输入*/scanf("/t/t/t%s",stud[n+i].num);printf("/t/t/tstudent's name:");scanf("/t/t/t%s",stud[n+i].name);printf("/t/t/tstudent's score:");scanf("/t/t/t%d",&stud[n+i].score);gets(x); /*清除多余的输入*/printf("/t/t/tany more records?(Y/N)");scanf("/t/t/t%c",&sign); /*输入判断*/i++;}return(n+i);}void Display(Student stud[],int n) /*显示所有记录*/{int i;printf("/t/t/t-----------------------------------/n"); /*格式头*/ printf("/t/t/tnumber name score/n");printf("/t/t/t-----------------------------------/n");for(i=1;i<n+1;i++) /*循环输入*/{printf("/t/t/t%-16s%-15s%d/n",stud[i-1].num,stud[i-1].name,stud[i-1]. score);if(i>1&&i%10==0) /*每十个暂停*/{printf("/t/t/t-----------------------------------/n"); /*格式*/ printf("/t/t/t");system("pause");printf("/t/t/t-----------------------------------/n");}}printf("/t/t/t");system("pause");}void Sort_by_num(Student stud[],int n) /*按学号排序*/{ int i,j,*p,*q,s;char t[10];for(i=0;i<n-1;i++) /*冒泡法排序*/for(j=0;j<n-1-i;j++)if(strcmp(stud[j].num,stud[j+1].num)>0){strcpy(t,stud[j+1].num);strcpy(stud[j+1].num,stud[j].num);strcpy(stud[j].num,t);strcpy(t,stud[j+1].name);strcpy(stud[j+1].name,stud[j].name);strcpy(stud[j].name,t);p=&stud[j+1].score;q=&stud[j].score;s=*p;*p=*q;*q=s;}}int Insert_a_record(Student stud[],int n) /*插入一条记录*/{char x[10]; /*清除多余输入所用*/printf("/t/t/tstudent's num:"); /*交互式输入*/scanf("/t/t/t%s",stud[n].num);printf("/t/t/tstudent's name:");scanf("/t/t/t%s",stud[n].name);printf("/t/t/tstudent's score:");scanf("/t/t/t%d",&stud[n].score);gets(x);n++;Sort_by_num(stud,n); /*调用排序函数*/printf("/t/t/tInsert Successed!/n"); /*返回成功信息*/return(n);}int Delete_a_record(Student stud[],int n) /*按姓名查找,删除一条记录*/ { char s[20];int i=0,j;printf("/t/t/ttell me his(her) name:"); /*交互式问寻*/scanf("%s",s);while(strcmp(stud[i].name,s)!=0&&i<n) i++; /*查找判断*/if(i==n){ printf("/t/t/tnot find!/n"); /*返回失败信息*/return(n);}for(j=i;j<n-1;j++) /*删除操作*/{strcpy(stud[j].num,stud[j+1].num);strcpy(stud[j].name,stud[j+1].name);stud[j].score=stud[j+1].score;}printf("/t/t/tDelete Successed!/n"); /*返回成功信息*/return(n-1);}void Query_a_record(Student stud[],int n) /*查找并显示一个记录*/ { char s[20];int i=0;printf("/t/t/tinput his(her) name:"); /*交互式输入*/scanf("/t/t/t%s",s);while(strcmp(stud[i].name,s)!=0&&i<n) i++; /*查找判断*/if(i==n){ printf("/t/t/tnot find!/n"); /*输入失败信息*/return;}printf("/t/t/this(her) number:%s/n",stud[i].num); /*输出该学生信息*/ printf("/t/t/this(her) score:%d/n",stud[i].score);}void Statistic(Student stud[],int n) /*新增功能,输出统计信息*/{ int i,j=0,k=0,sum=0;float aver; /*成绩平均值*/for(i=0;i<n;i++) /*循环输入判断*/{sum+=stud[i].score;if(stud[j].score>stud[i].score) j=i;if(stud[k].score<stud[i].score) k=i;}aver=1.0*sum/n;printf("/t/t/tthere are %d records./n",n); /*总共记录数*/ printf("/t/t/tthe hignest score:/n"); /*最高分*/printf("/t/t/tnumber:%s name:%sscore:%d/n",stud[j].num,stud[j].name,stud[j].score);printf("/t/t/tthe lowest score:/n"); /*最低分*/printf("/t/t/tnumber:%s name:%sscore:%d/n",stud[k].num,stud[k].name,stud[k].score);printf("/t/t/tthe average score is %5.2f/n",aver); /*平均分*/ }int AddfromText(Student stud[],int n) /*从文件中读入数据*/ { int i=0,num;FILE *fp; /*定义文件指针*/char filename[20]; /*定义文件名*/printf("/t/t/tInput the filename:");scanf("/t/t/t%s",filename); /*输入文件名*/if((fp=fopen(filename,"rb"))==NULL) /*打开文件*/{ printf("/t/t/tcann't open the file/n"); /*打开失败信息*/ printf("/t/t/t");system("pause");return(n);}fscanf(fp,"%d",&num); /*读入总记录量*/while(i<num) /*循环读入数据*/{fscanf(fp,"%s%s%d",stud[n+i].num,stud[n+i].name,&stud[n+i].score); i++;}n+=num;fclose(fp); /*关闭文件*/printf("/t/t/tSuccessed!/n");printf("/t/t/t");system("pause");return(n);}void WritetoText(Student stud[],int n) /*将所有记录写入文件*/{int i=0;FILE *fp; /*定义文件指针*/char filename[20]; /*定义文件名*/printf("/t/t/tWrite Records to a Text File/n"); /*输入文件名*/ printf("/t/t/tInput the filename:");scanf("/t/t/t%s",filename);if((fp=fopen(filename,"w"))==NULL) /*打开文件*/{printf("/t/t/tcann't open the file/n");system("pause");return;}fprintf(fp,"%d/n",n); /*循环写入数据*/while(i<n){fprintf(fp,"%-16s%-15s%d/n",stud[i].num,stud[i].name,stud[i].score); i++;}fclose(fp); /*关闭文件*/printf("Successed!/n"); /*返回成功信息*/}void main() /*主函数*/{int n=0;for(;;){switch(menu_select()) /*选择判断*/{case 1:printf("/t/t/tInput Records/n"); /*输入若干条记录*/n=Input(stu,n);break;case 2:printf("/t/t/tDisplay All Records/n"); /*显示所有记录*/Display(stu,n);break;case 3:printf("/t/t/tSort/n");Sort_by_num(stu,n); /*按学号排序*/printf("/t/t/tSort Suceessed!/n");printf("/t/t/t");system("pause");case 4:printf("/t/t/tInsert a Record/n");n=Insert_a_record(stu,n); /*插入一条记录*/printf("/t/t/t");system("pause");break;case 5:printf("/t/t/tDelete a Record/n");n=Delete_a_record(stu,n); /*按姓名查找,删除一条记录*/ printf("/t/t/t");system("pause");break;case 6:printf("/t/t/tQuery/n");Query_a_record(stu,n); /*查找并显示一个记录*/printf("/t/t/t");system("pause");break;case 7:printf("/t/t/tStatistic/n");Statistic(stu,n); /*新增功能,输出统计信息*/printf("/t/t/t");system("pause");break;case 8:printf("/t/t/tAdd Records from a Text File/n");n=AddfromText(stu,n); /*新增功能,输出统计信息*/ break;printf("/t/t/tWrite to a Text file/n");WritetoText(stu,n); /*循环写入数据*/printf("/t/t/t");system("pause");break;case 0:printf("/t/t/tHave a Good Luck,Bye-bye!/n"); /*结束程序*/ printf("/t/t/t");system("pause");exit(0);}}}四、函数调用关系图注:“→”代表调用Input函数打印链表记录Display函数输入若干条记录menu_select()函数选择菜单Sort_by_num函数显示所有记录Delete_a_record函数按姓名查找,删除一条记录Query_a_record查找并显示一条记录Statistic函数输出统计信息(新增)AddfromText函数从正文中添加数据到结构体数组中Main函数Insert_a_record插入一条记录WritetoText函数将所有数据写入文件中退出程序Reverse(head)函数按学号排序五、设计测试流程1、进入界面2、输入选项1,回车;按提示输入数据:3、回到主菜单;输入选项7,回车;输入文件名:data.txt,回车;出现成功提示,则读入文件操作成功。

学生成绩管理系统c语言课程设计报告(一)

学生成绩管理系统c语言课程设计报告(一)

学生成绩管理系统c语言课程设计报告(一)学生成绩管理系统C语言课程设计报告摘要本文介绍了一款学生成绩管理系统的C语言课程设计报告。

该系统可实现学生信息的录入、成绩的计算和管理等功能。

本报告详细介绍了系统的需求分析、概要设计和实现细节等内容。

系统需求分析功能需求•系统管理员可以进行学生信息的录入、删除和修改操作。

•系统可以根据已有的学生成绩进行排名,并输出排名列表。

•系统可以查询某个学生的成绩和排名。

•系统可支持标准输出数据、文件存储数据两种方式,并提供相应的查询功能。

性能需求•系统应该能够在1秒内响应用户的操作请求。

•系统的数据存储应该具有较高的可靠性和安全性。

界面需求•系统的界面应该易于操作和友好。

•界面的色彩搭配应该符合用户的视觉需求。

概要设计总体设计•系统分为两个主要模块:学生信息管理模块和成绩查询排名模块。

•学生信息管理模块包括对学生信息的增删改查等操作。

•成绩查询排名模块可以查询学生的成绩并输出排名列表。

•数据存储采用文件存储方式,具有较高的可靠性和安全性。

数据结构设计•采用结构体的方式存储学生信息,包括学生ID、姓名、性别、年龄和成绩等信息。

struct Student{int id; //学生IDchar name[20]; //学生姓名char sex[5]; //学生性别int age; //学生年龄float score; //学生成绩};约束条件•系统仅支持标准C语言的编写。

实现细节数据存储•学生信息存储在文件中,每个学生的信息存储在一行中。

•系统启动时初始化学生信息的文件。

•系统在每次修改或录入学生信息后自动保存信息到文件中。

功能实现•学生信息管理模块实现学生信息的增删改查等操作,并将操作结果输出到文件和屏幕上。

•成绩查询排名模块实现了对某个学生的单独查询和对所有学生的排名查询,并将查询结果输出到文件和屏幕上。

总结本文针对学生成绩管理系统的C语言课程设计报告进行了介绍。

从需求分析、概要设计到实现细节,本文详细地介绍了该系统的开发过程。

c语言成绩管理系统课程设计报告

c语言成绩管理系统课程设计报告

c语言成绩管理系统课程设计报告一、引言:成绩管理系统是一种可以有效管理学生课程成绩的工具。

通过该系统,教师可以方便地录入、修改和查询学生的成绩,而学生和家长也可以方便地查看自己的成绩情况。

本次课程设计旨在设计一个基于C语言的成绩管理系统,实现对学生课程成绩的录入、修改和查询等功能。

二、系统设计:1. 数据结构设计:为了实现成绩管理系统的各项功能,需要设计相关的数据结构。

对于学生信息,可以设计一个结构体,包含学号、姓名、性别等字段;对于课程成绩,可以设计一个结构体,包含学号、课程名称、成绩等字段。

2. 功能设计:(1) 学生信息录入功能: 教师可以通过输入学生的学号、姓名、性别等信息,将学生信息录入系统中。

(2) 成绩录入功能: 教师可以通过输入学生的学号和课程名称,将学生的课程成绩录入系统中。

(3) 成绩修改功能: 教师可以根据学生的学号和课程名称,修改学生的课程成绩。

(4) 成绩查询功能: 学生和家长可以通过输入学生的学号,查询学生的课程成绩。

三、系统实现:1. 用户界面设计:使用C语言中的控制台窗口,通过菜单的方式显示系统功能选项,用户可以通过键盘输入选择对应的功能。

2. 数据存储设计:使用文件存储学生信息和课程成绩。

通过读取和写入文件的方式,实现数据的持久化存储。

3. 功能实现:(1) 学生信息录入功能的实现: 用户输入学生的学号、姓名、性别等信息后,将学生信息写入文件。

(2) 成绩录入功能的实现: 用户输入学生的学号、课程名称和成绩后,将成绩信息写入文件。

(3) 成绩修改功能的实现: 用户输入学生的学号、课程名称和新的成绩后,根据学号和课程名称找到对应的成绩信息并修改。

(4) 成绩查询功能的实现: 用户输入学生的学号后,根据学号在文件中查找对应的成绩信息并显示在控制台窗口。

四、系统测试:对于每一个功能,设计相应的测试用例,验证系统的正确性和稳定性。

例如,录入一个学生信息后,查询该学生的信息是否正确;录入一门课程成绩后,修改该成绩并查询是否修改成功等。

C语言综合实验报告——学生成绩管理

C语言综合实验报告——学生成绩管理

⑦数据统计:按平均分统计各分数段的学生人数,用比较美观的格式输出统计结果。
按平均分统计各分数段学生人数
==============================================
分数段 0—59 60—69 70—79 80—89 90—100
人数
…… …… …… ……
……
============================================== ⑧退出:退出整个程序的运行。(注:1—7 功能运行后,程序仍返回主界面,可接着 选择其他功能继续运行,只有选择选项 0 才真正退出程序的运行)
//循环输出学生信息
{ printf(" %5d ",s[i].num);
//"%5d"限制数据输出格式及宽度(空格补齐)
printf(" %6s ",s[i].name); printf(" %.2f ",s[i].english); printf(" %.2f ",s[i].math); printf(" %.2f ",s[i].com); printf(" %.2f ",s[i].ave); printf("\n");
int output(int k) {
int i; printf(" 学号
//定义临时变量 i 姓名 英语 数学 计算机 平均分 \n");
printf("===================================================\n");
for(i=0;i<k;i++)

c语言课程设计学生成绩管理系统报告(一)

c语言课程设计学生成绩管理系统报告(一)

c语言课程设计学生成绩管理系统报告(一)C语言课程设计学生成绩管理系统报告介绍•学生成绩管理系统的设计背景•项目的目的和意义系统需求分析•功能需求–学生信息录入–成绩管理–查询与统计•性能需求–系统响应速度–数据存储和读取效率系统设计•系统结构•数据库设计•模块功能划分技术选型•编程语言选择:C语言•数据库选择:SQLite 实现步骤•搭建开发环境•创建学生信息录入模块•创建成绩管理模块•创建查询与统计模块•进行系统集成和测试系统遇到的问题与解决方案•内存管理问题•数据库操作问题•用户界面设计问题系统改进与优化•提升性能•增加功能•修复bug结果与展望•成果总结•可能的进一步发展方向参考资料•《C语言程序设计》•《数据库系统概念》•网上开源学生成绩管理系统案例介绍本文将介绍一款基于C语言的学生成绩管理系统的设计与开发。

学生成绩管理系统是一种用于方便高校或学校管理学生成绩的工具。

本项目的目的是提供一个简单易用、功能全面的学生成绩管理系统。

系统需求分析功能需求学生成绩管理系统需具备以下功能:1.学生信息录入:能够方便地录入学生的基本信息,包括姓名、学号、班级等。

2.成绩管理:能够记录学生的各科成绩,并能对成绩进行增、删、改、查等操作。

3.查询与统计:能够根据学号、姓名等条件进行查询,还能对成绩进行统计,包括总分、平均分等。

性能需求为确保学生成绩管理系统的良好使用体验,有以下性能需求:1.系统响应速度:系统应具备快速响应用户操作的能力,避免出现卡顿现象。

2.数据存储和读取效率:系统应能高效地存储和读取学生信息和成绩数据,以保证系统的稳定性和可靠性。

系统设计系统结构学生成绩管理系统采用前后端分离的设计方式,前端使用C语言编写,后端使用SQLite数据库进行数据存储和读取。

系统结构由三个主要模块组成:学生信息录入模块、成绩管理模块和查询与统计模块。

数据库设计系统使用SQLite数据库进行数据存储和读取。

数据库设计包括学生表和成绩表,学生表存储学生的基本信息,成绩表存储学生的各科成绩。

学生成绩管理设计报告c语言

学生成绩管理设计报告c语言

学生成绩管理设计报告c语言1. 引言学生成绩管理是学校教务工作中重要的一环,对于学生的学业发展和教育教学质量提升起着重要的作用。

为了更好地管理学生成绩信息,提高工作效率和信息准确性,我们设计了一款使用C语言开发的学生成绩管理系统。

本文将阐述学生成绩管理系统的需求分析、系统设计和实施方案。

2. 需求分析2.1 功能需求学生成绩管理系统应具有以下基本功能:1. 学生信息管理:包括学生基本信息的录入、编辑和删除,如学号、姓名、性别、年级等;2. 成绩录入:教师根据学生的课程成绩单,输入学生的具体成绩;3. 成绩查询:学生和教师可以查询学生的个人成绩和班级整体成绩;4. 统计分析:系统可以自动计算班级成绩的平均分、最高分、最低分等统计指标,并进行排名;5. 数据备份与恢复:对学生成绩信息进行备份和恢复,以防数据丢失。

2.2 性能需求为了满足大规模学生数量和复杂的成绩管理需求,系统需要具备以下性能要求:1. 数据处理迅速:能够在短时间内完成大规模学生信息和成绩的录入、查询和统计;2. 安全性能强:保障学生信息的安全性,防止未经授权的人员访问和修改;3. 数据准确性高:确保学生成绩数据的准确性,保证教学评价的客观性;4. 系统稳定性好:能够长时间稳定运行,不易崩溃或出现错误。

3. 系统设计3.1 数据结构设计学生成绩管理系统的数据结构设计包括学生信息结构和成绩信息结构。

c学生信息结构typedef struct {char stu_id[10]; 学号char stu_name[20]; 姓名char gender[5]; 性别int grade; 年级} Student;成绩信息结构typedef struct {char stu_id[10]; 学号char course_name[50]; 课程名float score; 分数} Score;3.2 模块设计学生成绩管理系统包括以下几个模块:1. 学生信息管理模块:用于学生信息的增、删、改、查;2. 成绩录入模块:教师根据指定格式的成绩单录入学生的成绩;3. 成绩查询模块:学生和教师可以根据学号或姓名查询学生的个人成绩和班级整体成绩;4. 统计分析模块:系统可以自动计算班级成绩的平均分、最高分、最低分等统计指标,并进行排名;5. 数据备份与恢复模块:对学生成绩信息进行备份和恢复,以防数据3.3 系统界面设计学生成绩管理系统的界面设计采用命令行界面,简洁、易用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C 语言程序设计报告课题:学生成绩管理时间:一、需求分析任务要求:自学C语言中有关链表及外部文件的内容,设计出学生成绩管理。

具体要求如下:1.主要功能:(1)能按学期、按班级完成对学生成绩的录入、修改(2)能按班级统计学生的成绩,求学生的总分及平均分,并能根据学生的平均成绩进行排序(3)能查询学生成绩,不及格科目及学生名单(4)能按班级输出学生的成绩单系统功能需求分析:1、定义一个结构体类型,成员包括学期、班级、各科成绩、建立链表,定义该结构体类型的指针,用于指向各结点;2、分别建立具有添输入、修改、查询、总分及平均分、排序等功能的子函数,完成相应功能,对程序实现模块化。

二、概要设计系统总体设计框架:对程序进行模块化,建立输入、修改、查询、查找和显示功能的子函数,各子函数中运用链表存储数据。

系统功能模块图:三、详细设计主要功能模块的算法设计思路如下:1、输入信息函数(1)定义指向结构体变量的指针; (2)移动指针,找到插入结点; (3)在要插入的结点输入信息; (4)返回头指针。

2、修改信息(1)定义指向结构体变量的指针;(2)用指针检验链表中是否有记录,若没记录,出现报错,然后要求重新输入; (3)根据要修改的编号查找对应结点; (4)修改信息;(5)修改成功。

3、排序函数(1)定义所要排序的班级和链表的头指针为形参;(2)调用排序函数,把班级和链表的头指针赋给形参;(3)在子函数中进行排序;(4)输出排序结果。

4、显示学生成绩信息(void Disp(Link l))(1)选择想要查询的项目(学生各科成绩、不及格科目、班级成员);(2)用指针检验是否有记录;(3)若无记录,输出提示信息,返回主函数;若有记录,移动指针,依次输出记录;5、查询班级成绩信息(void Find(Link l))(1)选择所要查询的班级;(2)输入班级:(3)在链表中寻找相应结点;(4)输出结点信息。

以上各个函数的流程图如下:子函数排序:求和:求平均数:四、主要源程序代码#include <stdio.h>#include <malloc.h>#include <string.h>#define NULL 0#define LEN sizeof (struct student)#define PRINT printf("======================main menu=======================\n")#define PRIN printf("Please chose the number:\n")#define PRI printf("Sorry,the number you chose is error,please chose again\n")struct student \*定义一个结构体*\{int term; \*学期*\int class; \*班级*\char name[20]; \*姓名*\int score_1; \*科目一*\int score_2; \*科目二*\int score_3; \*科目三*\float ave; \*平均分*\int sum; \*总分*\struct student *next;};int n;struct student *creat(void) \*创建信息链表*\{struct student *head;struct student *p1,*p2;n=0;p1=p2=(struct student *)malloc(LEN);printf("Please input the student information:\n");printf("Term Class Name Score_1 Score_2 Score_3\n");scanf("%d%d%s%d%d%d",&p1->term,&p1->class,p1->name,&p1->score_1,&p1->score_2,&p1-> score_3);head=NULL;while(p1->term!=0){n=n+1;if(n==1) head=p1;else p2->next=p1;p2=p1;p1=(struct student *) malloc(LEN);scanf("%d%d%s%d%d%d",&p1->term,&p1->class,p1->name,&p1->score_1,&p1->score_2,&p1-> score_3);}p2->next=NULL;return(head);}void sort(struct student *p,int f) \*排序(形参为链表的头指针和想要排序的班级)*\ {int a,b,c,e;float d;char z[20];struct student *r,*s;while(f!=p->class) \*判断是否是想要排序的班级*\p=p->next;for(r=p;f==p->class&&r;r=r->next)for(s=p;s->next&&f==s->next->class;s=s->next)if(s->ave<(s->next)->ave){ \*交换结构体各个成员*\d=s->ave; s->ave=s->next->ave; s->next->ave=d;a=s->score_1; s->score_1=s->next->score_1; s->next->score_1=a;b=s->score_2; s->score_2=s->next->score_2; s->next->score_2=b;c=s->score_3; s->score_3=s->next->score_3; s->next->score_3=c;e=s->sum; s->sum=s->next->sum; s->next->sum=e;strcpy(z,s->name); strcpy(s->name,s->next->name); strcpy(s->next->name,z);}}int add(int i,struct student *p) \*求和(形参为想要求和的班级和链表的头指针)*\ {int sum;if(i==p->class)sum=p->score_1+p->score_2+p->score_3;return(sum);}float average(int i,struct student *p) \*求平均分(形参为想要求和的班级和链表的头指针)*\ {float ave;int sum;sum=add(i,p); \*调用add函数求和*\ave=sum/3.0;return(ave);}void main() \*主函数*\{int i,m;struct student *p,*q;printf("================Now begin to set up===================\n");p=creat(); \*调用creat函数,并创建一个信息链表*\q=p;do{PRINT;printf(" 1:correct the student information\n"); \*修改学生信息*\printf(" 2:calculate the students' score and then sort\n"); \*统计学生成绩并排序*\ printf(" 3:search the students' information\n"); \*查找学生信息*\ printf(" 4:output the score of student\n"); \*输出学生成绩*\ PRIN;doscanf("%d",&i);if(i!=1&&i!=2&&i!=3&&i!=4) PRI; \*报错功能*\}while(i!=1&&i!=2&&i!=3&&i!=4);if(i==1){char x[20];printf("Please input the name of student you want to correct:");do{scanf("%s",x); \*输入你要修改学生成绩的姓名*\ for(p=q;p!=NULL;p=p->next){if(strcmp(x, p->name)==0) \*查找学生*\{printf("Now,please input the new score of the student:\n"); \*输入新的成绩*\printf("Score_1 Score_2 Score_3\n");scanf("%d%d%d",&p->score_1,&p->score_2,&p->score_3);printf("Information correct succeed\n");printf("Now,%s's score is %-6d%-6d%-6d\n",x,p->score_1,p->score_2,p->score_3);break;}}if(p==NULL)printf("Can't find the student,please input again:"); \* 报错功能*\}while(p==NULL);p=q;}if(i==2){int j;printf("Please input which class you want to count:");scanf("%d",&j); \*输入你想要统计的班级*\printf("The score information of %d class is:\n",j);printf("Name Score_1 Score_2 Score_3 Average Sum\n");for(p=q;p!=NULL;p=p->next){p->sum=add(j,p); \* 调用函数add并赋值给结构体*\p->ave=average(j,p); \*调用函数average并赋值给结构体*\}printf("Before sorted,the student score is:\n");for(p=q;p!=NULL;p=p->next)if(j==p->class)printf("%-9s%-9d%-9d%-9d%-9.2f%-9d\n",p->name,p->score_1,p->score_2,p->score_3,p->ave,p->sum); \*输出排序前的学生成绩*\ p=q;sort(p,j); \*调用函数sort*\printf("After sorted,the student score is:\n");for(p=q;p!=NULL;p=p->next)if(j==p->class)printf("%-9s%-9d%-9d%-9d%-9.2f%-9d\n",p->name,p->score_1,p->score_2,p->score_3,p->ave,p->sum); \*输出排序后的成绩*\ p=q;}if(i==3){int a;char y[20];PRINT;printf(" 1:search the score of student\n"); \*查询学生的各科分数*\printf(" 2:search the score of fail lesson\n"); \*查询不及格科目*\printf(" 3:search the name of student\n"); \*查询每个班级的成员*\printf("What's do you want to do?"); PRIN;scanf("%d",&a); \*输入你想要执行的操作的序号*\ if(a==1){printf("Please input the student name:");do{scanf("%s",y); \*输入你想要查询的学生的姓名*\for(p=q;p!=NULL;p=p->next){if(strcmp(y,p->name)==0) \*查找学生*\{printf("%s's score is %d %d %d\n",p->name,p->score_1,p->score_2,p->score_3);break; \*输出学生的成绩*\}}if(p==NULL)printf("Can't find the student,please input again:"); \*报错功能*\}while(p==NULL);p=q;}else if(a==2){for(p=q;p!=NULL;p=p->next){if(p->score_1<60)printf("%s's lesson 1 is failed and the score is %d\n",p->name,p->score_1);if(p->score_2<60)printf("%s's lesson 2 is failed and the score is %d\n",p->name,p->score_2);if(p->score_3<60)printf("%s's lesson 3 is failed and the score is %d\n",p->name,p->score_3);}p=q;}else if(a==3){int c;printf("Please input the number of class:\n");scanf("%d",&c); \*输入你想要输出成绩的班级*\ printf("The %d class have these student:\n",c);for(p=q;p!=NULL;p=p->next)if(c==p->class)printf("%-10s",p->name);printf("\n");p=q;}}if(i==4){int b;printf("Please input which class:\n"); \*输入你想要输出成绩的班级*\ scanf("%d",&b);printf("Now,the score of the student of %d class is:\n",b);printf("Name Score_1 Score_2 Score_3\n");for(p=q;p!=NULL;p=p->next)if(b==p->class)printf("%-12s%-12d%-12d%-12d\n",p->name,p->score_1,p->score_2,p->score_3);} 输出成绩PRINT;printf("Do you want to going on?\n"); \*是否想要继续操作*\ printf(" 1:YES 2:NO \n");scanf("%d",&m);}while(m!=2);}五、调试分析过程描述运行情况如下:输入学生的基本信息:修改指定学生的成绩:统计并排序一班成绩:统计并排序二班的成绩:查询指定学生的成绩:查询学生不及格的成绩:查询班级成员:输出一班的成绩:输出二班的成绩:调试过程中的主要问题及解决方法:1、执行排序函数时出错,指针指向不确定。

相关文档
最新文档