课程设计——学生成绩管理系统 C语言
课程设计——学生成绩管理系统
基本要求:
1.程序功能
编程实现一个基础的成绩管理系统。
2.设计目的
通过本程序综合掌握结构体类型、指针、函数、文件等知识的综合使用。
3.功能要求(可扩充功能)
(1)实现简单的菜单设计,如下所示:
1添加学生信息
2显示学生信息
3查找学生信息
4插入学生信息
5删除学生信息
6成绩计算
7按总分降序输出
0退出
(2)每个学生的信息至少包括姓名、学号、3门课程的成绩、班级等信息。
(3)”添加学生信息” :输入新的学生信息以后,系统将把相关信息存储到文件中。以班级为单位存放到不同的文件中。至少有3个班,每个班级至少10个学生。
(4) ”显示学生信息”:系统将从文件中读取数据,按要求显示所有的学生信息。为使界面美观,可考虑用二维表格的形式输出。
(5) “查找学生信息”:可进一 步设计,如按姓名查找或按学号查找,或者查找某门课程的最高/最低成绩、或者在所有学生中查找平均分最高/最低的学生信息等。
(6) “插入学生信息”:根据学号顺序进行插入。
(7) ”删除学生信息”:可进一步设计,根据姓名删除还是根据学号删除。删除前显示该条记录,并提交用户确认。
(8) "成绩计算”:可扩充,如计算每个学生的总分、平均分;计算每个班级每门课程的平均分。
(9) “按总分降序输出”:可扩展,按总分降序或升序。
4.要求采用模块化设计,独立的功能(如添加、显示、查询、删除等)应在各个自定义函数中实现。
5.撰写课程设计报告,内容包括:功能结构图、程序流程图、函数列表、各函数功能简介及完整的源程序(包含必要的注释),程序运行结果等。(设计报告格式自行设计)
6.原始学生数据输入后(如至少10个学生的信息),请用文件保存,以后其他操作的数据都要从文件中读出来,不允许手工再输入原始数据。其他操作对文件的读写不作特别要求。
7 请从第2页开始合理设计文档及排版。此表格内的格式请勿变动。
8 完成后的电子文档以姓名命名,如“张一一.doc”。正文采用5号宋体,1.5倍行距。
一、 流程图
二、 函数列表及功能简介
函数名 功能说明
void load(STU *head); 从文件中载入数据
void save(STU *head); 保存此次运行所进行的操作
STU *addl(STU *head); 添加新的学生信息
void shuru(STU *head); 打印输入界面并输入数据
void chakan(STU *head); 以不同的方式查看数据
void zhuanhuan(STU *head); 把指针指向文件传递给数组
void search(STU *head); 查找学生信息
void Amend(STU* head); 修改学生信息
void menu(); 主菜单的打印
void swap(STU* px); 排序交换学生信息
void Rank(STU* px); 学生信息排序
void insert(STU* head); 插入学生信息
void del(STU* head); 删除学生信息
int compare(char *a,char *b); 与密码函数并用,比较密码
void Password(int o); 密码系统,输入与修改密码
void gotopos(int x,int y); 光标到达指定位置
void Set(); 系统设置,与密码,颜色修改相关
void color(int); 修改系统颜色
Int main() 主函数
三、源程序(有注释)
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <stdlib.h>
#include <conio.h>
typedef struct Students_Information
{int id;char name[20];int sub[3];double total_score;struct Students_Information *next;
} STU;
typedef struct zerostu
{int id;char name[20];int sub[3];double total_score;
}zs;
zs num[30000];
int N=0;
char Right_pass[100];
STU *head,*node;
FILE *fp;
void load(STU *head);
void save(STU *head);
STU *addl(STU *head);
void shuru(STU *head);
void chakan(STU *head);
void zhuanhuan(STU *head);
void search(STU *head);
void Amend(STU* head);
void menu();
void swap(STU* px);
void Rank(STU* px);
void insert(STU* head);
void del(STU* head);
int compare(char *a,char *b);
void Password(int o);
void gotopos(int x,int y);
void Set();
void color(int);int main()
{system("color F1");int n;head=(STU*)malloc(sizeof(STU));head->next = NULL;load(head);gets(Right_pass);while(1){menu();scanf("%d",&n);printf("\n");switch(n){case 1:shuru(head);break;case 2:chakan(head);break;case 3:search(head);break;case 4:Amend(head);break;case 5:insert(head);break;case 6:del(head);break;case 7:Rank(head);break;case 8:save(head);break;case 9:Set();break;default:return 0;break;}}return 0;
}
void menu()
{system("cls");printf("\n");printf(" |------------------------------------------------------|\n");printf(" | ***欢迎来到学生管理系统*** 数据:[%d]条 |\n",N);printf(" |------------------------------------------------------|\n");printf(" | |\n");printf(" | 1: 输 入 学 生 数 据 |\n");printf(" | |\n");printf(" | 2: 查 看 学 生 信 息 |\n");printf(" | |\n");printf(" | 3: 搜 索 学 生 信 息 |\n");printf(" | |\n");printf(" | 4: 修 改 数 据 |\n");printf(" | |\n");printf(" | 5: 插 入 学 生 信 息 |\n");printf(" | |\n");printf(" | 6: 删 除 学 生 信 息 |\n");printf(" | |\n");printf(" | 7: 进 行 排 序 |\n");printf(" | |\n");printf(" | 8: 保 存 本 次 内 容 |\n");printf(" | |\n");printf(" | 9: 系 统 设 置 |\n");printf(" | |\n");printf(" | 0: 退 出 系 统 |\n");printf(" |------------------------------------------------------|\n");printf(" |--- 请输入对应数字进行操作 ---|\n");printf("\n");printf(" Enter The Number: ");
};
void load(STU *head)
{STU *p=NULL,*s=NULL;s=(STU*)malloc(sizeof(STU));fp=fopen("E:\\Text.dat","rb");while(1){if(fread(s,sizeof(STU),1,fp)!=0){p=addl(head);p->id=s->id;p->sub[1]=s->sub[1];p->sub[2]=s->sub[2];p->sub[0]=s->sub[0];p->total_score=s->total_score;strcpy(p->name,s->name);N++;}else { if(N==0) node=head;else node=p;break;}}free(s);fclose(fp);};
STU *addl(STU *head)
{STU *q=head;while(q->next!=NULL)q=q->next;q->next=(STU*)malloc(sizeof(STU));q->next->next=NULL;return q->next;
};
void save(STU *head)
{STU *p;p=head->next;fp=fopen("E:\\Text.dat","wb");while(p!= NULL){fwrite(p, sizeof(STU), 1, fp);p=p->next;}printf(" -----保存成功-----\n");fclose(fp);
};
void shuru(STU *head)
{Password(0);STU *p,*p1,*p2,*s;FILE *fp;int id,sub1,sub2,sub3;char name[20];system("cls");p=node;printf("\n");printf(" ----------------------------\n");printf(" ^学号=0时结束^\n\n");printf(" -->请输入学号:");scanf("%d",&id);while(id!=0){printf(" 输入姓名:");scanf("%s",name);printf(" 输入第一科成绩:");scanf("%d",&sub1);printf(" 输入第二科成绩:");scanf("%d",&sub2);printf(" 输入第三科成绩:");scanf("%d",&sub3);s=(STU*)malloc(sizeof(STU));s->id=id;strcpy(s->name,name);s->sub[0]=sub1;s->sub[1]=sub2;s->sub[2]=sub3;s->total_score=sub1+sub2+sub3;p->next=s;p=s;printf(" -->请输入学号:");scanf("%d",&id);N++;}p->next=NULL;fp = fopen("D:/a.txt", "wb");getchar();
};
void chakan(STU *head)
{STU *p,*s;char i;system("cls");p=head->next;printf(" |-------------------------------------------------------------------------------------------------------------|\n");printf(" | 学 生 学 号---------姓名---------学科一--------学科二---------学科三-----------总 成 绩 |\n\n");while(p!=NULL){printf(" %20d %6s %8d %9d %10d %13.1f \n",p->id,p->name,p->sub[0],p->sub[1],p->sub[2],p->total_score);printf(" \n");p=p->next;}printf(" |-------------------------------------------------------------------------------------------------------------|\n\n");printf(" 按1返回主菜单;按2退出系统:");getchar();scanf("%c",&i);if(i=='1') return;else exit(0);};
void zhuanhuan(STU *head)
{int i=0,j;STU *p,*s;p=head->next;while(p!=NULL){num[i].id=p->id;strcpy(num[i].name,p->name);for(j=0;j<3;j++)num[i].sub[j]=p->sub[j];num[i].total_score=p->total_score;i++;p=p->next;}};void search(STU* head)
{int i,id;char ch;STU* px;px=head;system("cls");printf("\n");printf(" ----请输入需要搜索的学生学号----\n\n");printf(" Enter The ID Number: ");scanf("%d",&id);printf("\n");for(i=0;i<N;i++){px=px->next;if(id==px->id){printf(" |----------------|\n");printf(" ID: %d \n",px->id);printf(" Name: %s \n",px->name);printf(" Sub1: %d \n",px->sub[0]);printf(" Sub2: %d \n",px->sub[1]);printf(" Sub3: %d \n",px->sub[2]);printf(" Toatl:%.1f \n",px->total_score);printf(" |----------------|\n\n");break;}}if(i==N)printf(" ------没 有 这 名 学 生------\n");printf(" 按1返回主菜单;按2退出系统:");getchar();scanf("%c",&ch);if(ch=='1') return;else exit(0);}
void Amend(STU* head)
{int i,id;char c;STU* px;px=head;Password(0);system("cls");printf("\n");printf(" ----请输入需要修改的学生学号----\n\n");printf(" Enter The ID Number: ");scanf("%d",&id);if(id==0) {printf(" 无此数据!!! \n");return ;}for(i=0;i<N;i++){px=px->next;if(id==px->id){printf(" |----------------\n");printf(" |A.Name: %s \n",px->name);printf(" |B.Sub1: %d \n",px->sub[0]);printf(" |C.Sub2: %d \n",px->sub[1]);printf(" |D.Sub3: %d \n",px->sub[2]);printf(" |E.Toatl: %.1f \n",px->total_score);printf(" |----------------\n\n");break;}}if(i==N){printf(" ------No Such Student------\n");return ;}printf(" ---请输入需要修改的选项----\n");getchar();printf(" 输入字母:");scanf("%c",&c);printf(" *输入新信息:");switch(c){case 'A':case 'a':scanf("%s",px->name);break;case 'B':case 'b':scanf("%d",&px->sub[0]);break;case 'C':case 'c':scanf("%d",&px->sub[1]);break;case 'D':case 'd':scanf("%d",&px->sub[2]);break;case 'E':case 'e':scanf("%lf",&px->total_score);break;default : {printf(" 选择错误!!\n");break;return;}}if('a'<=c&&c<='d'||'A'<=c&&c<='D'){px->total_score=px->sub[0]+px->sub[1]+px->sub[2];}printf(" 修改成功!!!\n");getchar();}void swap(STU* px)
{int t;double tem,shu1;STU* head;char tname[20];tem=px->total_score;px->total_score=px->next->total_score;px->next->total_score=tem;t=px->id;px->id=px->next->id;px->next->id=t;t=px->sub[0];px->sub[0]=px->next->sub[0];px->next->sub[0]=t;t=px->sub[1];px->sub[1]=px->next->sub[1];px->next->sub[1]=t;t=px->sub[2];px->sub[2]=px->next->sub[2];px->next->sub[2]=t;strcpy(tname,px->name);strcpy(px->name,px->next->name);strcpy(px->next->name,tname);}void Rank(STU* head)
{int i=0,j=0,t,k;STU* px;char ch;system("cls");px=head;printf("\n");printf(" |------------------------------------------------------|\n");printf(" | 请输入对应数字进行操作 |\n");printf(" |------------------------------------------------------|\n");printf(" |1: 以总分进行排序 |\n");printf(" | |\n");printf(" |2: 以学科一进行排序 |\n");printf(" | |\n");printf(" |3: 以学科二进行排序 |\n");printf(" | |\n");printf(" |4: 以学科三进行排序 |\n");printf(" | |\n");printf(" |5: 以学号进行排序 |\n");printf(" | |\n");printf(" |6: 返回菜单 |\n");printf(" |------------------------------------------------------|\n");printf(" |--Please Enter the Corresponding Number to Operate----|\n");printf("\n");printf(" Enter The Number: ");scanf("%d",&k);for(i=0;i<N; i++){px=head->next;for(j=0; j<N-1; j++){if(k==1){if((px->total_score)<(px->next->total_score)){swap(px);}}else if(k==2){if((px->sub[0])<(px->next->sub[0])){swap(px);}}else if(k==3){if((px->sub[1])<(px->next->sub[1])){swap(px);}}else if(k==4){if((px->sub[2])<(px->next->sub[2])){swap(px);}}else if(k==5){if((px->id)<(px->next->id)){swap(px);}}else return ;px=px->next;}}px=head->next;system("cls");printf(" |-------------------------------------------------------------------------------------\n");printf(" | ID Number-----Name-------Sub1-------Sub2-------Sub3-------Total Score\n |\n");for(i=0; i<N; i++){printf(" |Student %d: ",i+1);printf(" %-10d ",px->id);printf(" %-7s",px->name);printf(" %-5d",px->sub[0]);printf(" %-5d",px->sub[1]);printf(" %-5d",px->sub[2]);printf(" %-5.1f\n |\n",px->total_score);px=px->next;}printf(" |-------------------------------------------------------------------------------------\n\n");printf(" ------- %d Students In Total !!! -------\n\n",N);printf(" ----->>>按1返回主菜单;按2退出系统:");getchar();scanf("%c",&ch);if(ch=='1') return;else exit(0);}
void insert(STU* head)
{Password(0);int num;STU *p1,*p2,*s;system("cls");printf(" ---请输入需要插入的学号---\n");printf(" Enter The Number: ");scanf("%d",&num);s=(STU*)malloc(sizeof(STU));s->id=num;printf(" 输入姓名:");scanf("%s",s->name);printf(" 输入第一科成绩:");scanf("%d",&s->sub[0]);printf(" 输入第二科成绩:");scanf("%d",&s->sub[1]);printf(" 输入第三科成绩:");scanf("%d",&s->sub[2]);s->total_score=s->sub[0]+s->sub[1]+s->sub[2];p1=head;p2=head->next;while((p2!=NULL)&&(p2->id>num)){p1=p2;p2=p2->next;}s->next=p2;p1->next=s;N++;getchar();
}
void del(STU* head)
{Password(0);int num;STU *p1,*p2;system("cls");printf(" ---请输入需要删除的学号---\n");printf(" Enter The Number: ");scanf("%d",&num);if(head==NULL) {printf(" 输入错误\n");return ;}p1=head;while(num!=p1->id&&p1->next!=NULL){p2=p1;p1=p1->next;}if(num==p1->id){if(p1==head) head->next=p1->next;else p2->next=p1->next;printf(" ---已删除的学生学号:%d---\n",num);N--;}else printf(" 输入错误\n");getchar();
}void Password(int o)//密码系统,有三次输入机会.
{char pass[100],Re1[100],Re2[100];system("cls");printf("\n");if(o==0){printf(" ----------------------------------------------------------\n");printf(" To Continue The Operation,You Need To Input The Password \n");printf(" ----------------------------------------------------------\n");for(int i=0; i<4; i++){printf(" |----------------%d Times Left----------------|\a\n\n",4-i);printf(" Please Enter The Password: ");gets(pass);if(!compare(pass,Right_pass)){printf("\n");printf(" |----------------Wrong !!!--------------------|\n");printf("\n");if(3-i!=0){printf("\n");}else{printf(" --------Opportunities Have Been Run out!!!--------\n");exit(0);}}else{printf("\n");printf(" ---------------Password Correct !!!----------\n\n");if(o==1) goto PA;break;}}}else{Password(0);PA:printf(" 输 入 新 密 码: ");gets(Re1);printf("\n");printf(" 确 认 密 码: ");gets(Re2);printf("\n");if(compare(Re1,Re2)){strcpy(Right_pass,Re1);printf(" ------------密 码 修 改 成 功 !!!------------\n");return ;}else{printf(" ------前 后 密 码 不 一 致 !!!------\a\n\n");goto PA;}}
}int compare(char *a,char *b)//密码比较函数,返回0||1
{for(int i=0; i<100; i++){if(*a!=*b)return 0;a++,b++;if(*a==*b&&*a=='\0')break;}return 1;
}void gotopos(int x,int y)
{COORD pos;pos.X=x;pos.Y=y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);}void Set()
{system("cls");int ch;printf(" |---------------------------|\n");printf(" | 系统设置 |\n");printf(" |---------------------------|\n");printf(" |1: 修改密码 |\n");printf(" |2: 系统字体颜色设置 |\n");printf(" |---------------------------|\n");printf(" |----->>请输入对应序号: ");scanf("%d",&ch);getchar();switch(ch){case 1:Password(1);break;case 2:color(0);break;default: return;}}void color(int n)
{int c;if(n==0){for(int i=1;i<=15;i++){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),i);printf(" 第%d号颜色\n\n",i);}printf("\n");printf(" |----->>请输入对应序号: ");scanf("%d",&c);getchar();SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),c);}}
四、程序运行结果
4.1 输入测试
4.2 查看信息测试
4.3 搜索信息测试
4.4 插入学生信息测试
4.5 排序输出测试
4.6 系统设置测试
课程设计——学生成绩管理系统 C语言相关推荐
- 学生成绩统计c语言课程设计,学生成绩管理系统-C语言课程设计
记一次课程设计作业 学生成绩管理系统#include #include #include #include /* 学生成绩管理系统介绍 2017C语言课程设计 202160936 1.支持将数据保存 ...
- c语言课程设计查找分数与删除元素,c语言课程设计学生成绩管理系统
<c语言课程设计学生成绩管理系统>由会员分享,可在线阅读,更多相关<c语言课程设计学生成绩管理系统(31页珍藏版)>请在人人文库网上搜索. 1.河南理工大学计算机科学与技术学院 ...
- C语言成绩统计源代码,C语言课程设计学生成绩管理系统+源码
<C语言课程设计学生成绩管理系统+源码>由会员分享,可在线阅读,更多相关<C语言课程设计学生成绩管理系统+源码(25页珍藏版)>请在人人文库网上搜索. 1.简易教学管理系统的设 ...
- C语言学生成绩管理设计总结,C语言课程设计学生成绩管理系统个人总结
C语言课程设计学生成绩管理系统个人总结 C语言课程设计--学生成绩管理系统 个人心得体会 (徐州工程学院 14计嵌1班 07组 张凯) 这一周以来的课程设计,不仅让我明白了C语言的确是一门很有用的,但 ...
- MFC课程设计 --学生成绩管理系统
MFC课程设计 ,C++课程设计 --学生成绩管理系统 ps:因为课设完成的过程大家都不太一样,以下的代码仅供学习一下在MFC下各个控件的用法,有问题欢迎留言讨论. 实验目的 使用MFC类库编制应用程 ...
- c语言学生成绩管理系统课设作业,C语言课程设计——学生成绩管理系统
摘 要 学生成绩管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生成绩管理系统应该能够为用户提供充足的信息和快捷的查询手段.但一直以来人们使用传统人工的方式 ...
- C语言课程设计——学生成绩管理系统(详细报告)
欢迎来到<IT_WEH_coder>的博客.我是小魏,一名普通的在校大学生.希望大家多多关照,我们一起成长一起进步,也希望大家多多支持我鸭,喜欢我就给我一个关注吧! 本课程设计的编程部分所 ...
- 按课程查询学生成绩C语言,C语言课程设计学生成绩管理系统
1. 设计目标 设计一个简单的学生成绩管理系统,系统要解决成绩录入.计算学分和平均分成绩排名和成绩查询等几个方面. 主要功能分为四部分: ① 提供成绩录入界面. ② 统计每个学生的总分和平均分. ③ ...
- c语言课程设计 学生成绩管理系统
学生成绩管理系统要求: 1.系统功能以菜单方式工作: 2.数据的输入: 3.数据的插入: 4.数据的输出: 5.数据的删除: 6.数据的查找,通常以两种方式进行查找,如姓名.学号: 目录 1.结构体和 ...
最新文章
- java 制作报表案例_javaweb项目报表案例
- 手把手教你做产品经理,视频课教程已经发布,欢迎观看
- 刚刚有水了一道,用递归实现进制转换
- mysql 配置文件my-default.cnf
- Activiti 流程实例、任务、执行对象及相关的表
- Spyder 常用操作
- linux proftpd 用户,[原]把boblog博客的用户导入proftpd用户认证数据库
- Excel闪退问题解决
- 3、RH850端口说明及及复用功能配置
- Legacy(传统)BIOS的历史和不足
- c语言城市交通灯优化,城市智能交通灯系统(本科)毕业论文.doc
- 计算机网络实验(二)2交换机的基本配置与管理
- c语言简易计算器大作业报告,简易计算器 (C语言)作业
- Lighttpd介绍
- 移动互联网草根狂欢:三四线城镇用户价值凸显
- EUV光刻机内部揭秘!
- 计算机组成原理---指令系统
- 小编教你如何打印出一张好看的思维导图
- 【腾讯地图API】制作多途经点的线路导航——路线坐标规划
- 鸿蒙合香丸有副作用吗,苏合香丸能长期吃吗 有没有副作用
热门文章
- music generation with DL and sings datasets music datasets
- 乳腺癌细胞数据分析Logistic回归模型
- MySQL #格式unicode转汉字
- 内置对象的API Array数组对象 String字符串对象 json字符串 JSON对象 js作用域及变量预解析 引用类型与值类型区别 共享引用 基本包装类型 数组去重
- 周迅 女明星卸妆后判若两人 (图)
- R语言标准化(归一化)之scale()函数、sweep()函数
- android u盘 uuid,(已解决)root device uuid is 'UUID'
- Spock测试框架如何Mock静态方法
- HTML源码中 form 标签的 enctype 属性
- 科技英语计算机单元答案,科技英语部分课后练习答案.ppt