结构体数组实现学生成绩管理
查询学生成绩 结构体的使用

查询学生成绩结构体的使用学生成绩结构体可以用来存储一个学生的基本信息和各个科目的成绩。
下面是使用结构体来定义一个学生成绩的例子:cpp#include <iostream>#include <string>using namespace std;struct Student {string name;int id;double math_score;double english_score;double science_score;};int main() {Student s; = "T om";s.id = 1001;s.math_score = 85;s.english_score = 90;s.science_score = 92;cout << "姓名:" << << endl;cout << "学号:" << s.id << endl;cout << "数学成绩:" << s.math_score << endl;cout << "英语成绩:" << s.english_score << endl;cout << "科学成绩:" << s.science_score << endl;return 0;}输出结果为:姓名:Tom学号:1001数学成绩:85英语成绩:90科学成绩:92这个例子定义了一个名为Student的结构体,包含了一个字符串类型的name,一个整型的id和三个双精度浮点型的成绩属性。
在主函数中,定义了一个名为s的Student类型的变量,并赋值它的姓名、学号和各科成绩。
学生成绩管理系统(c语言结构体以及文件操作)实验报告

没有找到这个学生的信息!
您还想继续进行查找吗?()
成绩输出
《成绩输出:》
写文件
已经成功写入文件!
读文件
谢谢您的使用
容错处理
输入错误!
2、各个模块
定义学生的信息结构体
函数功能:利用循环输入学生的学号姓名以及成绩等信息。
请输入参加考试的人数:
请输入第个学生的信息:学号,姓名,成绩(数学、英语,物理)
返回学生人数
定义学生信息的结构体
函数功能:计学生的平均分、总分
函数功能:循环输出学生的成绩信息
定义学生的信息结构体
声明打印的函数
函数功能:按照学生的总分进行排序
交换学号。
交换姓名
交换成绩
交换总分。
交换平均分。
函数功能:按照学生的姓名字进行排序
交换学号。
交换姓名
交换成绩
交换总分。
交换平均分。
函数功能,遍历查找学生的名字
熟悉文件的基本操作以及增量的测试方法
实验内容(问题,思路,程序,结果)
得分
一、设计思路:
仔细阅读系统要求,首先将此系统化分为如下模块(即如下函数)
1、输入初始的学生信息:其中包括学生的学号、姓名、数学、物理、英语成绩等相关信息;使用循环,以及结构体成员调用一次录入每个学生的成绩等学生信息
2、计算平均和总分模块:利用两层循环,计数变量累加一次循环一个学生、计数变量进行与科目次数相同的累加循环每个科目的成绩进行累加。
3、按照学生成绩以及姓名字典排序模块:比较学生成绩的高低以及姓名字典的大小,使用选择法进行排序
4、查询模块:遍历结构体数组,如果姓名相同则循环输出学生的信息。
5、写文件模块:使用函数打开文件以后进行循环写入。一直到最后一个学生。
C语言结构体版学生成绩管理系统

C语⾔结构体版学⽣成绩管理系统本⽂实例为⼤家分享了C语⾔实现学⽣成绩管理系统的具体代码,供⼤家参考,具体内容如下结构体版的学⽣成绩管理系统主要功能有按1 输⼊学⽣信息按2 输出学⽣信息按3 查询学⽣信息按4 修改学⽣信息按5 删除学⽣信息按6 插⼊学⽣信息按7 排序总成绩信息学⽣信息主要有姓名,班级,学号,C语⾔成绩,⾼数成绩,⼤学英语成绩,控制台界⾯输出格式有点不美观。
#include<stdio.h>#include<string.h>struct student{char name[20];//名字char sex[10];//性别int number;//学号char ban[20];//班级int c;//C语⾔成绩int gaoshu;//⾼数成绩int yingyu;//⼤学英语成绩int sum;//总成绩}stu[60];int n;//学⽣数量void menu()//菜单{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");}void input()//学⽣信息的录⼊{int i,j=1;printf("\n 请输⼊总学⽣数量:");scanf("%d",&n);for(i=1;i<=n;i++){printf(" 输⼊第%d个学⽣相关信息\n",j++);printf("输⼊姓名\n");scanf("%s",stu[i].name);getchar();printf("输⼊性别\n");scanf("%s",stu[i].sex);printf("输⼊学号\n");scanf("%d",&stu[i].number);printf("输⼊班级\n");scanf("%s",stu[i].ban);printf("输⼊c语⾔成绩\n");scanf("%d",&stu[i].c);printf("输⼊⾼数成绩\n");scanf("%d",&stu[i].gaoshu);printf("输⼊⼤学英语成绩\n");scanf("%d",&stu[i].yingyu);stu[i].sum=stu[i].c+stu[i].gaoshu+stu[i].yingyu;printf("该学⽣的总成绩:%d\n",stu[i].sum);}}void output()//学⽣信息输出{int i;printf("----------学⽣信息的是----------\n");if(n==0)printf(" ++++++这⾥没有信息++++++\n");else for(i=1;i<=n;i++){printf("名字:%2s",stu[i].name);printf("性别:%2s",stu[i].sex);printf("学号:%2d",stu[i].number);printf("班级:%2s",stu[i].ban);printf("c语⾔成绩:%2d\n",stu[i].c);printf("⾼数成绩:%2d\n",stu[i].gaoshu);printf("英语成绩:%2d\n",stu[i].yingyu);stu[i].sum=stu[i].c+stu[i].gaoshu+stu[i].yingyu;printf("该学⽣的总成绩:%d\n",stu[i].sum);}}void search()//查询{int num,i,t;char a[20],k;if(n!=0){printf("选择查找条件(1:学号 2:名字)\n");scanf("%d",&t);if(t==1){printf("输⼊您要查找的学⽣的学号\n");scanf("%d",&num);for(i=1;i<=n;i++){if(stu[i].number==num){printf("名字:%s",stu[i].name);printf("性别:%s",stu[i].sex);printf("学号:%d",stu[i].number);printf("班级:%s",stu[i].ban);printf("c语⾔成绩:%d\n",stu[i].c);printf("⾼数成绩:%d\n",stu[i].gaoshu);printf("英语成绩:%d\n",stu[i].yingyu);stu[i].sum=stu[i].c+stu[i].gaoshu+stu[i].yingyu;printf("该学⽣的总成绩:%d\n",stu[i].sum);break;}} if(i>n) printf("您查找的信息不存在或者学号输⼊错误\n"); }if(t==2){printf("输⼊您要查找的学⽣的名字\n");scanf("%s",a);for(i=1;i<=n;i++){k=strcmp(stu[i].name,a);if(k==0){printf("名字:%s",stu[i].name);printf("性别:%s",stu[i].sex);printf("学号:%d",stu[i].number);printf("班级:%s",stu[i].ban);printf("c语⾔成绩:%d\n",stu[i].c);printf("⾼数成绩:%d\n",stu[i].gaoshu);printf("英语成绩:%d\n",stu[i].yingyu);stu[i].sum=stu[i].c+stu[i].gaoshu+stu[i].yingyu;printf("该学⽣的总成绩:%d\n",stu[i].sum);break;}}if(i>n) printf("您查找的信息不存在或者学号输⼊错误\n"); }}else printf("对不起,这⾥没有学⽣信息\n");}void change()//修改{int num,i;printf("输⼊您要修改的学⽣的学号\n");scanf("%d",&num);if(n==0) printf(" ++++++这⾥没有信息++++++\n");else{for(i=1;i<=n;i++){if(stu[i].number==num){printf("您要修改的学⽣信息为\n");printf("名字:%s",stu[i].name);printf("性别:%s",stu[i].sex);printf("学号:%d",stu[i].number);printf("班级:%s",stu[i].ban);printf("c语⾔成绩:%d\n",stu[i].c);printf("⾼数成绩:%d\n",stu[i].gaoshu);printf("英语成绩:%d\n",stu[i].yingyu);stu[i].sum=stu[i].c+stu[i].gaoshu+stu[i].yingyu;printf("该学⽣的总成绩:%d\n",stu[i].sum);printf("\n");break;}}if(i>n) printf("您查找的信息不存在或者学号输⼊错误\n"); else{printf("输⼊姓名\n");scanf("%s",stu[i].name);getchar();printf("输⼊性别\n");scanf("%s",stu[i].sex);printf("输⼊学号\n");scanf("%d",&stu[i].number);printf("输⼊班级\n");scanf("%s",stu[i].ban);printf("输⼊c语⾔成绩\n");scanf("%d",&stu[i].c);printf("输⼊⾼数成绩\n");scanf("%d",&stu[i].gaoshu);printf("输⼊⼤学英语成绩\n");scanf("%d",&stu[i].yingyu);}}}void del()//删除{int i,j,e,num;if(n!=0){printf(" ****这是所有学⽣的信息****\n");for(i=1;i<=n;i++){printf("--------------------------*\n");printf("名字:%s\n",stu[i].name);printf(" *\n");printf("性别:%s\n",stu[i].sex);printf(" *\n");printf("学号:%d\n",stu[i].number);printf(" *\n");printf("班级:%s\n",stu[i].ban);printf(" *\n");printf("c语⾔成绩:%d\n",stu[i].c);printf("⾼数成绩:%d\n",stu[i].gaoshu);printf("英语成绩:%d\n",stu[i].yingyu);stu[i].sum=stu[i].c+stu[i].gaoshu+stu[i].yingyu;printf("该学⽣的总成绩:%d\n",stu[i].sum);printf("--------------------------*\n");}printf("请输⼊您要删除的学⽣的学号:");scanf("%d",&num);for(i=1;i<=n;i++)if(stu[i].number==num){j=i;for(e=i-1;e<n;e++,j++){strcpy(stu[j].name,stu[j+1].name);strcpy(stu[j].sex,stu[j+1].sex);stu[j].number=stu[j+1].number;strcpy(stu[j].ban,stu[j+1].ban);stu[j].c=stu[j+1].c;stu[j].gaoshu=stu[j+1].gaoshu;stu[j].yingyu=stu[j+1].yingyu;n--;}}printf("**********该学⽣信息已删除**********\n");}else printf("对不起,这⾥没有学⽣信息\n");}void add()//插⼊{int i,j,t;if(n!=0){printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n"); printf("^ 注: 下⾯已有信息,如有重复请不要插⼊ ^\n"); printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n"); printf("\n");for(i=1;i<=n;i++){printf("名字:%s",stu[i].name);printf("性别:%s",stu[i].sex);printf("学号:%d",stu[i].number);printf("班级:%s",stu[i].ban);printf("c语⾔成绩:%d\n",stu[i].c);printf("⾼数成绩:%d\n",stu[i].gaoshu);printf("英语成绩:%d\n",stu[i].yingyu);stu[i].sum=stu[i].c+stu[i].gaoshu+stu[i].yingyu;printf("该学⽣的总成绩:%d\n",stu[i].sum);printf("\n");}printf("是否继续插⼊(是:y 否:n)\n");printf("%c您的选择是:",t=getchar());t=getchar();if(t=='y'){j=n;printf("**********请插⼊学⽣相关信息**********\n");printf("输⼊姓名\n");scanf("%s",stu[j+1].name);getchar();printf("输⼊性别\n");scanf("%s",stu[j+1].sex);printf("输⼊学号\n");scanf("%d",&stu[j+1].number);printf("输⼊班级\n");scanf("%s",stu[j+1].ban);printf("输⼊c语⾔成绩\n");scanf("%d",&stu[j+1].c);printf("输⼊⾼数成绩\n");scanf("%d",&stu[j+1].gaoshu);printf("输⼊英语成绩\n");scanf("%d",&stu[j+1].yingyu);strcpy(stu[j+2].name,stu[j+1].name);strcpy(stu[j+2].sex,stu[j+1].sex);stu[j+2].number=stu[j+1].number;strcpy(stu[j+2].ban,stu[j+1].ban);stu[j+2].c=stu[j+1].c;stu[j+2].gaoshu=stu[j+1].gaoshu;stu[j+2].yingyu=stu[j+1].yingyu;printf(" 该学⽣信息已经插⼊\n");n++;}else printf("\n (▔▽▔)插⼊程序结束,请重新选择");printf("\n"); }else{i=1;printf("请输⼊要插⼊学⽣的相关信息\n");printf("输⼊姓名\n");scanf("%s",stu[i].name);getchar();printf("输⼊性别\n");scanf("%s",stu[i].sex);printf("输⼊学号\n");scanf("%d",&stu[i].number);printf("输⼊班级\n");scanf("%s",stu[i].ban);printf("输⼊c语⾔成绩\n");scanf("%d",&stu[i].c);printf("输⼊⾼数成绩\n");scanf("%d",&stu[i].gaoshu);printf("输⼊英语成绩\n");scanf("%d",&stu[i].yingyu);n++;}}void paixu(){int i,j,t;if(n!=0){printf("该排序是按照总分成绩从⾼到低进⾏排序\n");for(i=1;i<=n;i++)for(j=1;j<n;j++){if(stu[j].sum<stu[j+1].sum){t=stu[j].sum;stu[j].sum=stu[j+1].sum;stu[j+1].sum=t;}}for(i=1;i<=n;i++){printf("名字:%s\n",stu[i].name);printf("性别:%s\n",stu[i].sex);printf("学号:%d\n",stu[i].number);printf("班级:%s\n",stu[i].ban);printf("c语⾔成绩:%d\n",stu[i].c);printf("⾼数成绩:%d\n",stu[i].gaoshu);printf("总成绩:%d\n",stu[i].sum);}}else printf(" ++++++这⾥没有信息++++++\n");}void main(){int a,b=1;while(b){menu();printf("您选择的是: ");scanf("%d",&a);printf("\n");switch(a){case 1:input();break;//输⼊case 2:output();break;//输出case 3:search();break;//查找case 4:change();break;//修改case 5:del();break;//删除case 6:add();break;//插⼊case 7:paixu();break;//排序case 0:b=0;break;//退出}}printf(" 学⽣管理系统已退出( ^_^ )\n");}更多学习资料请关注专题《》。
C程序:学生成绩管理程序-结构体数组法

{
printf("\nNo.%3d%8s", p->number, p->name);
for (i=0; i<m; i++)
{
printf("%7d", p->score[i]);
}
printf("%11d%9.2f\n", p->sum, p->erage);
}
}
}
int SearchNum(STU *head, int num, int n)
{
int i;
for (i=0; i<n; i++)
{
if ((head+i)->number == num) return i;
}
return -1;
}
if (findNo == -1)
{
printf("\nNot found!\n");
}
else
{
PrintScore(head+findNo, 1, m);
}
}
char Menu(void)
{
char ch;
printf("\nManagement for Students' scores\n");
}
}
void TotalScore(STU *head, int n, int m)
{
STU *p;
int i;
C课程设计学生成绩管理系统结构数组实现

PART SIX
测试环境:Windows操作系统,Java开发环境,MySQL数据库 测试数据:学生成绩数据,课程数据,用户数据 测试工具:JUnit,Selenium,Postman 测试方法:单元测试,集成测试,系统测试,性能测试,安全测试
单元测试:针对每个功能模块进行测试,确保其正确性和稳定性
行
数据加密:使 用加密算法对 敏感数据进行 加密,确保数 据传输过程中
的安全性
身份验证:通 过用户名和密 码进行身份验 证,确保只有 授权用户才能
访问系统
访问控制:设 置不同的用户 权限,确保用 户只能访问其 授权范围内的
数据
安全审计:记 录所有用户的 操作日志,以 便在发生安全 问题时进行追
踪和调查
需求分析:明 确系统要实现 的功能和性能
要求
系统设计:确 定系统的架构 和模块划分, 设计数据库表
结构
编码实现:编写 代码实现各个模 块的功能,包括 用户登录、成绩 查询、成绩录入、
成绩修改等
测试与调试: 对系统进行测 试,发现并修 复bug,优化
系统性能
部署与维护:将 系统部署到服务 器上,定期进行 维护和更新,确 保系统的正常运
测试结果:功能测试、性能测试、 安全性测试等
添加标题
添加标题
测试工具:JUnit、Selenium、 LoadRunner等
添加标题
添加标题
性能评估:响应时间、吞吐量、资 源利用率等
错误处理:系统 在运行过程中可 能出现的错误类 型,如输入错误、 计算错误等,以 及相应的处理方 法。
系统优化:对系 统进行优化,提 高系统的运行效 率和稳定性,如 优化算法、优化 数据结构等。
优化数据结构:提 高数据查询和更新 的效率
C语言课设—结构体数组实现学生成绩管理功能

目录●程序功能简介●题目分析●函数的调用关系图及主要算法●源程序及注释●测试流程●心得感想一、程序的功能简介:用结构体数组实现学生成绩管理功能,可以用于数据输入、数据输出、数组排序、元素插入、元素删除、查询的功能的一个程序。
二、题目分析和主要算法:通过一系列函数来实现数据的处理,有的函数之间是相互调用的关系。
Input_Record(struct student stu[]);通过上面的函数实现数据的录入Display_All_Record(struct student stu[]);通过此函数实现数据的显示的功能Insert_A_Record(struct student stu[]);Insert(struct student stu[],struct student*);通过以上的函数实现数据的键盘录入,并有序的插到原有数据中,其中第一个函数是读入,第二个函数时插入原有数据中。
Delete_Record(struct student stu[]);Delete(struct student stu[],char a[]);通过以上的两个函数实现数据的删除,其中第一个是实现要删除的学生的姓名,第二个是实现覆盖删除功能。
Sort_by_Name(struct student stu[]);该函数是实现数据的排序功能,按照姓名的升序排列。
WritetoText(struct student stu[]);该函数是实现书籍写入文档的功能AddfromText(struct student stu[]);该行数实现从一个文档中读取数据并有序的放到结构体数组中的功能Query(struct student stu[]);该函数实现查询功能,利用的是按姓名查询看是否与之匹配,并实现输出三、函数调用关系图:四、源程序及注释:#include<stdio.h>#include<stdlib.h>#include<ctype.h>#include<string.h>char ss[20];int n=0;typedef struct student{char name[20];float score;}stud;struct student stu[20],stuu,stuua;void begining();int menu_select();int Input(struct student stu[]);void Display(struct student stu[]);void Sort_by_Name(struct student stu[]);void Insert(struct student stu[],struct student*); void Insert_A_Record(struct student stu[]);void Delete(struct student stu[],char a[]);void Delete_Record(struct student stu[]);void Query(struct student stu[]);void AddfromText(struct student stu[]);void WritetoText(struct student stu[]);main(){begining();for (;;){switch (menu_select()){case 1:printf("Execution of function 1\n"); Input(stu);system ("pause");break;case 2:printf("Execution of function 2\n"); Display(stu);system ("pause");break;case 3:printf("Execution of function 3\n");Sort_by_Name(stu);system ("pause");break;case 4:printf("Execution of function 4\n");Insert_A_Record(stu);system ("pause");break;case 5:printf("Execution of function 5\n");Delete_Record(stu);system ("pause");break;case 6:printf("Execution of function 6\n");Query(stu);system ("pause");break;case 7:printf("Execution of function 7\n");AddfromText(stu);system ("pause");break;case 8:printf("Execution of function 8\n");WritetoText(stu);system ("pause");break;case 0:printf("谢谢使用,再见!\n");system("pause");exit(0);}}}int menu_select(){char c;do{system ("cls");printf("\n\n\t\t 1.Input Records\n"); printf("\t\t 2.Display All Record\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.Add Record from a TextFile\n");printf("\t\t 8.Write to a Text File\n");printf("\t\t 0.Quit\n");printf("Give your choice(0-8):\n");scanf("%s",&c);}while (c<'0'||c>'8');return(c-'0');}int Input(struct student stu[]){int i=0,m;while (m!=0){printf("请您输入学生姓名和成绩:\n");scanf("%s%f",stu[i].name,&stu[i].score);i++;printf("您是否要继续输入,0——不是\n任意非零数字——是:\n");scanf("%d",&m);n=i;}}void Display(struct student stu[]){int i;if (n==0)printf("没有记录!\n");else{printf("序号\t\t姓名\t\t\t成绩\n");for (i=0;i<n;i++){printf("%d:\t\t%s\t\t\t%.1f\n",(i+1),stu[i].name,stu[i].score ); if ((i+1)%10==0)printf("\f");}}}void Sort_by_Name(struct student stu[]){int i,j;for (i=0;i<n;i++)for (j=0;j<n-1-i;j++)if (strcmp(stu[j].name,stu[j+1].name)>0) {stuu=stu[j];stu[j]=stu[j+1];stu[j+1]=stuu;}printf("排序成功!\n次序如下:\n");Display(stu);}void Insert_A_Record(struct student stu[]){struct student stuu1;struct student *p;printf("请您输入学生姓名和成绩:\n");scanf("%s%f",,&stuu1.score);p=&stuu1;Insert(stu,p);}void Insert(struct student stu[],struct student *p){int i,j;for (i=0;i<=n-1;i++)if (strcmp(p->name,stu[i].name)<0){for (j=n;j>i;j--)stu[j]=stu[j-1];stu[i]=*p;printf("操作成功");system("pause");break;}if (i==n){stu[n]=*p;printf("操作成功!");}n++;}void Delete_Record(struct student stu[]){int l;printf("请输入您要删除的学生名字:\n");scanf("%s",ss);printf("确定删除学生%s? 0——否\n任意非零数字——是\n",ss);scanf("%d",&l);if (l!=0){Delete(stu,ss);printf("操作成功\n");}}void Delete(struct student stu[],char a[]){int i,j,l;for(i=0;i<n;i++){if (strcmp(a,stu[i].name)==0){l=i++;break;}}if (i==n)printf("没有找到该学生.");elsefor (j=l;j<n-l;j++){strcpy(stu[j].name,stu[j+1].name);stu[j].score=stu[j+1].score;}n-=1;}void Query(struct student stu[]){char namelook[20];int i;printf("请输入您要寻找的学生的名字:\n");scanf("%s",namelook);printf("查询结果:\t\n");for (i=0;i<n;i++)if (strcmp(stu[i].name,namelook)==0)printf("\t姓名:%s\n \t成绩:%.2f\n",stu[i].name,stu[i].score); }void AddfromText(struct student stu[]){int i,num1;FILE *fp;char filename[20];printf("输入文件名:\n");scanf("%s",filename);if ((fp=fopen(filename,"r"))==NULL){printf("无法打开文件!\n");system("pause");}fscanf(fp,"%d ",&num1);for (i=0;i<num1;i++){fscanf(fp,"%s %f",stu[n+i].name,&stu[n+i].score);printf("\n");}system("pause");n+=num1;fclose(fp);Sort_by_Name(stu);}void WritetoText(struct student stu[]){int j;FILE *fp;char filename[20];printf("将信息写到另一个文件:\n请输入:");scanf("%s",filename);if ((fp=fopen(filename,"w"))==NULL){printf("无法打开\n");system("pause");}fprintf(fp,"%d ",n);for (j=0;j<n;j++)fprintf(fp,"%s %.2f",stu[j].name,stu[j].score);fclose(fp);printf("操作成功\n");}void begining(){printf("\n\n\n\n\n\n\t 董明佳\n\n\n"); printf("\t 070930115\n\n\n");printf("\t 支持正版\n\n\n");printf("\t 翻版必究\n\n\n\n\n\n\n");system ("pause");}五、测试流程:1、开始界面:董明佳070930115支持正版翻版必究2、菜单界面:输入相应的的数字选择需要的功能进行执行1.Input Records2.Display All Record3.Sort_by_Name4.Insert a Record5.Delete a Record6.Query7.Add Record from a TextFile8.Write to a Text File0.QuitGive your choice(0-8):3、输入1开始执行第一个:输入名字和成绩并判断是否继续输入,输入任意非零数字继续,输入0结束输入。
学生成绩管理系统结构体数组

}Student;
void main()
{
int a;int i=0;
printf("\t\t\1\1\1\1\1\1\1\1欢迎进入1102401班学生成绩管理系统\1\1\1\1\1\1\1\1\1\n");
printf("\t\t\t\t1.管理员登录\n\t\t\t\t2.用户登录\n\t\t\t\t3.退出\n");
break;
case 2:system("cls");
system("color 2f");
users();
break;
case 3:system("exit");
system("color 3f");
exit(0);
default:
system("cls");
main();
}
}
struct student stu[MAX],*p;
void save1(); /*保存到默认文件*/
void save2(); /*保存到指定文件*/
void remove(); /*删除文件*/
void remove1(); /*删除默认文件*/
void remove2(); /*删除指定文件*/
void copy(); /*复制指定文件*/
void rename(); /*重命名文件*/
void users(); /*用户登录界面*/
void menu(); /*主菜单*/
void input(); /*输入数据函数*/
void read(); /*读取函数*/
C语言利用结构体数组实现学生成绩管理系统

C语⾔利⽤结构体数组实现学⽣成绩管理系统要求:某班有最多不超过30⼈(具体⼈数由键盘输⼊)参加期末考试,最多不超过6门(具体门数由键盘输⼊)。
定义结构体类型描述学⽣信息,每个学⽣信息包括:学号、姓名、多门课的成绩、总成绩和平均成绩。
⽤结构体数组作为函数参数,编程实现如下菜单驱动的学⽣成绩管理系统。
(1)录⼊每个学⽣的学号、姓名和各科考试成绩。
(2)计算每门课程的总分和平均分。
(3)计算每个学⽣的总分和平均分。
(4)按每个学⽣的总分由⾼到低排出名次表。
(5)按学号由⼩到⼤排出成绩表。
(6)按姓名的字典顺序排出成绩表。
(7)按学号查询学⽣排名极其考试成绩。
(8)按姓名查询学⽣排名极其考试成绩。
(9)按优秀(90~100)、良好(80~90)、中等(70~80)、及格(60~70)、不及格(0~59)5个类别,对每门课程分别统计每个类别的⼈数以及所占的百分⽐。
(10)输出每个学⽣的学号、姓名、各科考试成绩以及每门课程的总分和平均分。
代码:#include<stdio.h>#include<Windows.h>#include<conio.h>#define SN 30 //学⽣⼈数#define CN 6 //科⽬数#define NL 20 //名字字节长度typedef struct student{long int num;char name[NL];float score[CN];float sum;float aver;}STU;STU s[SN];int itemSelected=-1;int n=0;//学⽣数int m=0;//课程数int Menu();//菜单void chose(int itemSelected);//选择void inputScore();//输⼊分数void AverofC();//计算每门课程平均数void AverofS();//每名学⽣总分和平均分void sortByNum();//学⽣总分排⾏void sortByGrade();void sortByName();void findByNum();void findByName();void statisticsAnalysis();void printScore();void main(){printf("请输⼊学⽣总数(n<%d):\n",SN);scanf("%d",&n);printf("请输⼊课程总数(m<%d):\n",CN);scanf("%d",&m);while(1){itemSelected=Menu();chose(itemSelected);itemSelected=-1;}}int Menu(){int itemSelected;system("cls");printf("\n ==============学⽣成绩管理系统===============\n");printf("\t 1.输⼊学号、姓名及各科成绩\n");printf("\t 2.计算每门课程总分和平均分\n");printf("\t 3.计算每个学⽣总分和平局分\n");printf("\t 4.按每个学⽣总分⾼低排出名次表\n");printf("\t 5.按学号从⼩到⼤排出成绩表\n");printf("\t 6.按学⽣字典顺序排出成绩表\n");printf("\t 7.按学号查询学⽣排名和考试成绩\n");printf("\t 8.按姓名查询学⽣排名和成绩\n");printf("\t 9.结果分析\n");printf("\t 10.输出信息\n");printf("\t 0.退出\n");printf("===============================================\n"); printf("请选择选项:");scanf("%d",&itemSelected);return itemSelected;}void chose(int itemSelected){switch(itemSelected){case 1: inputScore(); break;case 2: AverofC();break;case 3: AverofS();break;case 4: sortByGrade();break;case 5: sortByNum();break;case 6: sortByName();break;case 7: findByNum();break;case 8: findByName();break;case 9: statisticsAnalysis();break;case 10: printScore();break;case 0: exit(0);printf("即将退出程序");break;default: printf("输⼊错误!");break;}}void inputScore(){printf("\n===============================================\n"); printf("请输⼊学⽣学号、姓名及各科信息(输⼊0停⽌信息输⼊)\n");for(int i=0;i<n;i++){printf("学号(8位)");scanf("%ld",&s[i].num);if(s[i].num==0) break;getchar();//吸收多余换⾏符printf("姓名");gets(s[i].name);printf("请输⼊各科成绩");s[i].sum=0;for(int j =0;j<m;j++){scanf("%f",&s[i].score[j]);s[i].sum +=s[i].score[j];}}}void AverofC(){float sum[CN]={0};float average[CN]={0};for(int i=0;i<m;i++){for(int j=0;j<n;j++){sum[i]+=s[j].score[i];}average[i]=sum[i]/n;printf("第%d门课程的总分为:%.2f,平均分为%.2f\n",i+1,sum[i],average[i]); }getch();}void AverofS(){float sum[SN]={0};float average[SN]={0};for (int i=0;i<n;i++){for(int j=0;j<m;j++){sum[i]+=s[i].score[j];}average[i]=sum[i]/m;printf("第%d个学⽣的总分为:%.2f,平均分为%.2f\n",i+1,sum[i],average[i]);}getch();}void sortByNum(){//按学号从⼩到⼤排序STU temp1={0};for(int i=0;i<n-1;i++){if(s[i].num>s[i+1].num){temp1=s[i];s[i]=s[i+1];s[i+1]=temp1;}}printf("\n==============按学号从⼩到排序===============\n"); for(int j=0;j<n;j++){printf("该学⽣的学号为:%d\n",s[j].num);printf("该学⽣的姓名为:");for(int k=0;k<NL;k++){printf("%c",s[j].name[k]);}printf("\n该学⽣的各科成绩为\n");for(int c=0;c<m;c++){printf("第%d门成绩为%.2f\n",c+1,s[j].score[c]);}printf("\n");}getch();}void sortByGrade(){//按总分从⾼到低排序STU temp1={0};for(int i=0;i<n-1;i++){if(s[i].sum<s[i+1].sum){temp1=s[i];s[i]=s[i+1];s[i+1]=temp1;}}printf("\n============按总成绩从⾼到低排序===========\n");for(int j=0;j<n;j++){printf("该学⽣的学号为:%d\n",s[j].num);printf("该学⽣的姓名为:");for(int k=0;k<NL;k++){printf("%c",s[j].name[k]);}printf("\n该学⽣的各科成绩为\n");for(int c=0;c<m;c++){printf("第%d门成绩为%.2f\n",c+1,s[j].score[c]);}printf("该学⽣的总成绩为:%.2f",s[j].sum);printf("\n");}getch();}void sortByName(){//按姓名⾸字母字典顺序排序STU temp1={0};for(int i=0;i<n-1;i++){if(((int)(s[i].name[0])>(int)(s[i+1].name[0]))){//将名字⾸字母转成成ASCII码从⽽⽐较⼤⼩排序temp1=s[i];s[i]=s[i+1];s[i+1]=temp1;}}printf("\n==============按学号从⼩到排序===============\n"); for(int j=0;j<n;j++){printf("该学⽣的学号为:%d\n",s[j].num);printf("该学⽣的姓名为:");for(int k=0;k<NL;k++){printf("%c",s[j].name[k]);}printf("\n该学⽣的各科成绩为\n");for(int c=0;c<m;c++){printf("第%d门成绩为%.2f\n",c+1,s[j].score[c]);}printf("该学⽣的总成绩为:%.2f",s[j].sum);printf("\n");}getch();}void findByNum() {int find=-1;//记录需要查找的学号,并作为查找成功与否的标识符printf("请输⼊要查找的学号:");scanf("%d",&find);for(int i=0;i<n;i++){if(s[i].num==find){printf("\n查找成功\n");printf("该学⽣的学号为%d\n",s[i].num);printf("该学⽣的姓名为:");for(int k=0;k<NL;k++){printf("%c",s[i].name[k]);}printf("\n该学⽣的各科成绩为\n");for(int c=0;c<m;c++){printf("第%d门成绩为%.2f\n",c+1,s[i].score[c]);}printf("该学⽣的总成绩为:%.2f",s[i].sum);printf("\n");find=-2;}}if(find!=-2){printf("查⽆此⼈\n");printf("按任意键继续");}getch();}void findByName(){int is_find=0;char find[SN];printf("请输⼊要查找的姓名:");getchar();gets(find);for(int i=0;i<n;i++){if(strcmp(s[i].name,find)==0){printf("\n查找成功\n");printf("该学⽣的学号为%d\n",s[i].num);printf("该学⽣的姓名为:");for(int k=0;k<NL;k++){printf("%c",s[i].name[k]);}printf("\n该学⽣的各科成绩为\n");for(int c=0;c<m;c++){printf("第%d门成绩为%.2f\n",c+1,s[i].score[c]);}printf("该学⽣的总成绩为:%.2f",s[i].sum);printf("\n");is_find=1;}}if(is_find!=1){printf("查⽆此⼈\n");printf("按任意键继续");}getch();}void statisticsAnalysis(){printf("输出每门课程优秀、良好、中等、及格、不及格⼈数所占的百分⽐\n"); int a1[CN]={0},a2[CN]={0},a3[CN]={0},a4[CN]={0},a5[CN]={0};for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(s[i].score[j]>=90 && s[i].score[j]<=100){a1[j]++;}else if (s[i].score[j]>=80 && s[i].score[j]<90){a2[j]++;}else if (s[i].score[j]>=70 && s[i].score[j]<80){a3[j]++;}else if (s[i].score[j]>=60 && s[i].score[j]<70){a4[j]++;}else if (s[i].score[j]<60){a5[j]++;}}}printf("\n====================各们课程概况==================\n");for(int k=0;k<m;k++){printf("第%d门课的优秀⼈数占%.2f%%,",k+1,(a1[k]/(n*1.0))*100);printf("良好⼈数占%.2f%%,",(a2[k]/(n*1.0))*100);printf("中等⼈数占%.2f%%,",(a3[k]/(n*1.0))*100);printf("及格⼈数占%.2f%%,",(a4[k]/(n*1.0))*100);printf("不及格⼈数占%.2f%%,",(a5[k]/(n*1.0))*100);printf("\n");}getch();}void printScore(){printf("==============以下为学⽣信息==============");for(int j=0;j<n;j++){printf("该学⽣的学号为:%d\n",s[j].num);printf("该学⽣的姓名为:");for(int k=0;k<NL;k++){printf("%c",s[j].name[k]);}printf("\n该学⽣的各科成绩为\n");for(int c=0;c<m;c++){printf("第%d门成绩为%.2f\n",c+1,s[j].score[c]);}printf("该学⽣的总成绩为:%.2f",s[j].sum);printf("\n");}getch();}更多学习资料请关注专题《》。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
河北工业大学计算机软件技术基础(VC)2008年课程设计报告学院:电气自动化学院班级:电气c071 姓名:刘翔学号:073806 成绩: _ _ 一、题目:你选择的题目名称(编号是17号)二、设计思路1、总体设计1)分析程序的功能本程序的功能,就是实现对一个班学生的成绩管理。
可按课程输入学生成绩,并可按学生或课程进行查询。
2)系统总体结构:设计程序的组成模块,简述各模块功能本程序是完成一个班学生的成绩管理,为完成程序功能,至少要有两个这样的功能模块:输入成绩查询成绩因为查询模块中又分为:按学生查询按课程查询输入成绩:把学生个人成绩输入并储存。
查询成绩:在储存的成绩中查询所需的成绩。
按学生查询:以学生为列表查询某学生课程成绩。
按课程查询:以课程为列表查询某学生课程成绩。
2、各功能模块的设计:说明各功能模块的实现方法输入成绩:先选择输入成绩的课程,用if实现课程选择,后输入成绩,储存在定义的二维数组中。
查询成绩:先选择按学生查询还是按课程查询,并选择所查询的课程与学生,输出相应的成绩,运用了结构体数组。
3、设计中的主要困难及解决方案在这部分论述设计中遇到的主要困难及解决方案。
不会用结构体数组对成绩进行定义与调用,用二维数组代替并调用。
对学生信息与课程信息定义中格式有错。
1)困难1首先要解决信息的存储。
要定义两个结构数组,分别存储学生信息和课程信息。
学生信息包括学号和姓名,并且直接初始化;课程信息包括课程编号和课程名,也直接初始化。
因为主要是成绩管理,程序主要完成成绩的输入和查询,所以学生和课程信息直接在程序中进行初始化就可以了。
在数组中存储信息时,不仅要存储信息,还要为每个数组设置一个int变量,记录数组中实际存储了多少条信息。
2)困难2存储信息的调用。
3)困难3各个模块中函数的调用,循环。
4、你所设计的程序最终完成的功能1)说明你编制的程序能完成的功能输入学生的成绩,查询成绩。
可按课程输入学生成绩,并可按学生或课程进行查询。
2)准备的测试数据及运行结果66 67 68 6955 56 57 58三、程序清单#include<iostream.h>void input();void inquire();void accordingtostudent();void accordingtocourse();int m[4][7],n[10],p=1;struct student{int num;char name[20];}stu[4]={{51001,"Alice"},{51002,"John"},{52001,"Tom"},{52003,"Jim"}};struct course{int num;char name[16];}cl[7]={{1,"计算机基础"},{2,"计算机软件"},{3,"单片机"},{4,"大学英语"},{5,"英语阅读"},{6,"高等数学"},{7,"数值分析"}};void main(){int a;for(int i=0;i<5;i++){cout<<"欢迎使用学生成绩管理程序!"<<endl;cout<<"1.输入学生成绩"<<endl;cout<<"2.查询学生成绩"<<endl;cout<<"0.退出"<<endl;cout<<"请选择要紧进行操作"<<endl;cin>>a;if(a==1)input();if(a==2)inquire();if(a==0)break;}cout<<"谢谢使用本系统"<<endl;}void input(){int b,s;cout<<"课程信息如下"<<endl;for(int i=0;i<7;i++)cout<<cl[i].num<<'\t'<<cl[i].name<<endl;cout<<"请选择课程(输入序号):";cin>>b;s=b-1;n[p++]=b;cout<<"请输入<<"<<cl[s].name<<">>课程成绩"<<endl;for(int j=0;j<4;j++){cout<<stu[j].num<<'\t'<<stu[j].name<<'\t'<<"Grade=";cin>>m[j][b];cout<<endl;}}void inquire(){int c;cout<<"可进行查询操作为"<<endl;cout<<"1.按学生查询成绩"<<endl;cout<<"2.按课程查询成绩"<<endl;cout<<"0.退出"<<endl;cout<<"请选择要进行的操作:"<<endl;cin>>c;if(c==1)accordingtostudent();if(c==2)accordingtocourse();if(c==0)cout<<"谢谢使用本系统"<<endl;}void accordingtostudent(){int d;cout<<"学生信息如下"<<endl;for(int i=0;i<4;i++)cout<<i+1<<'\t'<<stu[i].name<<endl;cout<<"请选择学生(输入序号):";cin>>d;cout<<"查询"<<stu[d-1].name<<"同学的成绩如下"<<endl;for(int j=1;j<p;j++){cout<<cl[n[j-1]].name<<'\t'<<m[j-1][n[j]]<<endl;}}void accordingtocourse(){int e;cout<<"课程信息如下:"<<endl;for(int i=0;i<p-1;i++)cout<<cl[n[i]].num<<'\t'<<cl[n[i]].name<<endl;cout<<"请选择课程(输入序号)"<<endl;cin>>e;cout<<"查询<<"<<cl[e].name<<">>课程的成绩如下"<<endl;for(int j=0;j<4;j++)cout<<stu[j].name<<'\t'<<m[j][e]<<endl;}四、对该设计题目有何更完善的方案1、对自己完成程序进行自我评价。
能独立思考程序并完成程序编写与调试,不能很好的运用所学的知识解决程序中所出现的问题。
2、对课题提出更完善的方案1)可定义三个结构数组,分别存储学生信息、课程信息和成绩信息。
学生信息包括学号和姓名,并且直接初始化;课程信息包括课程编号、课程名和已登录成绩,也直接初始化;成绩信息包括学生信息的数组元素下标、课程信息数组元素下标、成绩。
学生和课程信息直接在程序中进行初始化就可以了。
2)对输入的数据要进行合理性检验,例如数组中存储了20名学生的信息,用户进行选择时,必须在这个范围内。
五、收获及心得体会1、通过本次课程设计,自己在哪些方面的能力有所提高。
对结构体数组运用,循环结构,函数的调用。
2、收获和心得体会。
1)能很好的运用结构体数组解决问题,对c++各个模块有了更深的认识,可以完成各种结构程序设计编写。
2)程序的编写很无聊,很难,编完以后觉得很有趣,喜欢编写程序。
日期:2008年6月21 日。