原理

在一个班级学生成绩管理系统中,希望处理每个学生的学习情况信息,其中包括学生的学号、姓名、各科名称和成绩等
并能使管理人员通过界面完成对学生信息的录入及对学生信息的录入及对数据的查找、浏览、插入、排序、保存。
要求:
1、提供用户界面
2、每一条记录包括一个学生的学号、姓名、三门课成绩、平均成绩
3、输入功能:可以一次完成若干条记录的输入
4、显示功能:完成全部学生记录的显示
5、查找功能:完成按姓名查找学生记录,并显示
6、排序功能:按学生平均成绩进行排序
7、插入功能:按平均成绩高低插入一条学生记录
8、将学生记录存在文件score中

主要数据结构

struct student
{
char No[10]; //学号
char name[20]; //姓名
int subject1; //成绩
int subject2;
int subject3;
float average; //平均成绩
};

算法分析

代码开始时定义学生管理系统所需要用到的函数,如输入、查找、排序、输出、插入等,然后逐个定义所需函数,输入函数利用循环逐个输入学生信息,查找函数利用if语句和循环进行查找,排序函数利用选择法排序将学生按平均成绩进行从小到大排序,输出函数利用文件把学生信息保存到文件中去,显示菜单函数利用system(“cls”)进行清屏然后显示菜单。

测试结果

源码

  1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #define N 1000
5 struct student
6 {
7 char No[10]; //学号
8 char name[20]; //姓名
9 int subject1; //成绩
10 int subject2;
11 int subject3;
12 float average; //平均成绩
13 };
14 int p=1;//判断是否有数据
15 int n=0;
16 struct student *stu=NULL;
17 void menu(); //菜单
18 void input(); //输入学生信息
19 void sort();
20 void fileoutput(); //输出学生信息
21 void find();
22 void show();
23 void insert();
24 void fileinput();
25 int main()
26 {
27 fileinput();//从文件读取数据
28 int flag;
29 int first=0;
30 if(p==0)
31 {
32 printf("首先请输入学生人数\n");
33 scanf("%d",&n);
34 }
35 if(p==0)
36 printf("\n初次选择,输入请选择 0:");
37 else
38 printf("已有数据,请选择其他操作,若要重新输入,请选择 0:");
39 while(1)
40 {
41 menu();
42 if(first==1)
43 printf("\n请继续选择操作的序号:");
44 else
45 first++;
46 scanf("%d",&flag);
47 if(flag ==-1)
48 break;
49 switch(flag)
50 {
51 case 0:input();break;//输入n个学生成绩
52 case 1:find();break;//输入学生姓名查找
53 case 2:sort();break;//将学生成绩从小到大排序
54 case 3:show();break;//显示所有学生成绩
55 case 4:insert();break;//按平均成绩高低插入一条学生记录
56 case 5:system("cls");break;//调出菜单
57 default:printf("本次选择不成功!\n");
58 }
59 }
60 fileoutput();//将所有学生成绩保存到score文件中
61 }
62 void menu()//菜单
63 {
64 printf("\n");
65 printf(" 学生管理系统 \n");
66 printf("***************************************************\n");
67 printf("* 请选择操作的序号,如果输入-1,程序结束 *\n");
68 printf("* *\n");
69 printf("* 0 输入n个学生信息 1 输入学生姓名查找 *\n");
70 printf("* *\n");
71 printf("* 2 将学生成绩从小到大排序 3 显示所有学生成绩 *\n");
72 printf("* *\n");
73 printf("* 4 插入一条学生记录 5 显示菜单 *\n");
74 printf("* *\n");
75 printf("***************************************************\n");
76 }
77 void input()//输入n个学生成绩
78 {
79 system("cls"); //清屏
80 int i,num=1;
81 char a[10];
82 stu = (struct student*)malloc(sizeof(struct student)*n);
83 for(i=0;i<n;i++)
84 {
85 printf("请输入第%d个学生的信息:\n",num);
86 num++;
87 gets(a);//防止回车键占用学号位置;
88 printf("学号:");
89 gets(stu[i].No);
90 printf("姓名:");
91 gets(stu[i].name);
92 printf("三科成绩:\n");
93 scanf("%d%d%d",&stu[i].subject1,&stu[i].subject2,&stu[i].subject3);
94 stu[i].average=stu[i].subject1+stu[i].subject2+stu[i].subject3;
95 stu[i].average=stu[i].average/3;
96 }
97 printf("一共%d个学生信息输入完毕\n",n);
98 }
99 void find()//输入学生姓名查找并输出该学生信息
100 {
101 system("cls"); //清屏
102 printf("请输入要查找的学生姓名:");
103 char a[10];
104 gets(a);//防止回车键占用学号位置;
105 char name[20];
106 gets(name);
107 int i,j=1001;
108 for(i=0;i<n;i++)
109 {
110 if((strcmp(name,stu[i].name))==0)
111 j=i;
112 }
113 if(j==1001)
114 printf("没有此学生!\n");
115 else
116 {
117 printf("成功已找到此姓名的学生\n");
118 printf("学号:");
119 puts(stu[j].No);
120 printf("姓名:");
121 puts(stu[j].name);
122 printf("三科成绩:%d %d %d\n平均成绩:%.2f\n",stu[j].subject1,stu[j].subject2,stu[j].subject3,stu[j].average);
123 }
124 }
125 void sort()//将学生成绩从小到大排序
126 {
127 system("cls"); //清屏
128 struct student t;
129 int min;
130 int i,j,num;
131 for(j=0;j<n;j++)
132 {
133 min=stu[j].average;
134 num=j;
135 for(i=j;i<n;i++)
136 {
137 if(stu[i].average<min)
138 {
139 num=i;
140 min=stu[i].average;
141 }
142 }
143 t=stu[j];
144 stu[j]=stu[num];
145 stu[num]=t;
146 }
147 show();
148 printf("已按照平均成绩从低到高排序完毕!\n");
149 }
150 void fileoutput()//将所有学生成绩输出到score文件中
151 {
152 system("cls"); //清屏
153 char filename[]={"score.txt"};
154 FILE *in;
155 if((in=fopen(filename,"w"))==NULL)
156 printf("无法打开此文件\n");
157 else
158 {
159 int i;
160 fprintf(in,"%d\n",n);
161 for(i=0;i<n;i++)
162 fwrite(&stu[i],sizeof(struct student),1,in);
163 fclose(in);
164 printf("已成功将学生记录保存于score文件中\n");
165 }
166 free(stu);
167 stu = NULL;
168 }
169 void show()//显示所有学生成绩
170 {
171 system("cls"); //清屏
172 printf("以下是所有学生信息:\n");
173 int i;
174 for(i=0;i<n;i++)
175 {
176 printf("学号:");
177 puts(stu[i].No);
178 printf("姓名:");
179 puts(stu[i].name);
180 printf("三科成绩:%d %d %d\n平均成绩:%.2f\n",stu[i].subject1,stu[i].subject2,stu[i].subject3,stu[i].average);
181 printf("\n");
182 }
183 }
184 void insert()//按平均成绩高低插入一条学生记录
185 {
186 system("cls"); //清屏
187 struct student *newbase = (struct student *)realloc(stu,sizeof(struct student)*(n+1));
188 stu = newbase;
189
190 int *m=&n;
191 printf("请输入要插入的学生的信息:\n");
192 struct student stu1;
193 char a[10];
194 gets(a);//防止回车键占用学号位置;
195 printf("学号:");
196 gets(stu1.No);
197 printf("姓名:");
198 gets(stu1.name);
199 printf("三科成绩:\n");
200 scanf("%d%d%d",&stu1.subject1,&stu1.subject2,&stu1.subject3);
201 stu1.average=stu1.subject1+stu1.subject2+stu1.subject3;
202 stu1.average=stu1.average/3;
203 int num;
204 int i;
205 for(i=1;1;i++)
206 {
207 if(stu1.average<stu[0].average)
208 {
209 num=0;
210 break;
211 }
212 else if(stu1.average>stu[*m-1].average)
213 {
214 num=*m;
215 break;
216 }
217 else if(stu[i-1].average<stu1.average&&stu1.average<stu[i].average)
218 {
219 num=i;
220 break;
221 }
222 }
223 struct student t;
224 for(i=*m-1;i>=num;i=i-1)//将num后的向后平移一个
225 {
226 stu[i+1]=stu[i];
227 }
228 stu[i+1]=stu1;
229 *m=*m+1;
230
231 show();
232 printf("已成功插入该学生的信息\n");
233 }
234 void fileinput()//从文件中读取数据
235 {
236 system("cls"); //清屏
237 char filename[]={"score.txt"};
238 FILE *in;
239 if((in=fopen(filename,"r"))==NULL)
240 {
241 printf("无法读取数据\n");
242 p=0;
243 }
244 else
245 {
246 fscanf(in,"%d\n",&n);
247 stu = (struct student*)malloc(sizeof(struct student)*n);
248 int i;
249 for(i=0;i<n;i++)
250 fread(&stu[i],sizeof(struct student),1,in);
251 fclose(in);
252 printf("已成功从score文件中将学生记录读取\n");
253 }
254 }

基于C语言文件操作的学生成绩管理系统的更多相关文章

  1. [项目记录] 用c语言完成的一个学生成绩管理系统

    一.要求: 学生成绩管理系统 某班有最多不超过30人(具体人数由键盘输入)参加期末考试,最多不超过6门(具体门数由键盘输入).使用链表编程实现如下菜单驱动的学生成绩管理系统. 从文件读入每个学生个人信 ...

  2. C项目实践--学生成绩管理系统

    1.功能需求分析 学生成绩管理系统是对学生基本信息及成绩的管理.本程序主要实现了对学生的学号.姓名等基本信息以及各项学科成绩进行增加.删除.修改.查询和保存到磁盘文件等操作.主要功能描述如下: (1) ...

  3. JSP+SSM+Mysql实现的学生成绩管理系统

    项目简介 项目来源于:https://gitee.com/z77z/StuSystem 本系统是基于JSP+SSM+Mysql实现的学生成绩管理系统.主要实现的功能有教师管理.学生管理.课程管理.学生 ...

  4. 【学生成绩管理系统】 大二c语言作业

    几年前写的了,只能在命令行窗口运行,虽然比较挫,还是有一定参考价值... #include <cstdio> #include <conio.h> #include <i ...

  5. C语言实现---学生成绩管理系统

    C语言实现了学生成绩管理系统,可以进行学生成绩的增加,删除,更新,查询,计算和展示. 完整代码如下: #include<stdio.h> #include<stdlib.h> ...

  6. 第一次写C语言小程序,可以初步理解学生成绩管理系统的概念

    1 成绩管理系统概述 1.1  管理信息系统的概念  管理信息系统(Management Information Systems,简称MIS),是一个不断发展的新型学科,MIS的定义随着科技的进步也在 ...

  7. 基于MFC的学生成绩管理系统的设计与实现

    1.技术介绍MFC是微软基础类库的简称,是微软公司实现的一个C++类库,主要封装了大部分的WINDOWS API函数,并且包含一个应用程序框架,以减少应用程序开发人员工作量.VC++是微软公司开发的C ...

  8. 学生成绩管理系统(C++指针、链表、文件及面向对象的运用)

    学生成绩管理系统 功能页面显示:    实现源码: #include<iostream> #include<fstream> #include<cstring> # ...

  9. go语言文件操作,这期资料比较详细( 欢迎加入go语言群: 218160862 )

    go语言文件操作,这期资料比较详细 欢迎加入go语言群: go语言深圳群 golang深圳 218160862 点击加入 文件操作 func Open(name string) (file *File ...

随机推荐

  1. Nessus扫描器的使用

    目录 Nessus Scans Settings 一个基本扫描的建立 自定义扫描策略 Nessus的高级扫描方法 Nessus Nessus号称是世界上最流行的漏洞扫描程序,全世界有超过75000个组 ...

  2. POJ3122贪心或者二分(分蛋糕)

    题意:        m+1个人来分n个蛋糕,每个人分到的蛋糕数必须一样而且还必须是同一个蛋糕上的,问每个人最多分多少蛋糕? 思路:      能想到的方法有两种,一个是直接贪心,另一个就是二分,这个 ...

  3. Python 爬虫与HTTP协议简介

    爬虫的实际例子: 搜索引擎(百度.谷歌.360搜索等). 伯乐在线. 惠惠购物助手. 数据分析与研究(数据冰山知乎专栏). 抢票软件等. 什么是网络爬虫: 通俗理解:爬虫是一个模拟人类请求网站行为的程 ...

  4. ThinkPHP5 Apache / IIs环境下 URL重写

    thinkPHP5新版本 隐藏index.php隐藏index.php 都写好了 public 隐藏 独立主机可以直接把根目录指向public下 虚拟主机可以把public下的index.php放到根 ...

  5. 百度地图api根据用户IP获取用户位置(PHP)

    1.百度地图开放平台找的你的ak ,链接:http://lbsyun.baidu.com/apiconsole/key 2.获取用户ip地址(外网ip 服务器上可以获取用户外网Ip 本机ip地址只能获 ...

  6. Vue中的MVVM

    MVVM(Model View VueModel) View层: 视图层 在我们前端开发中,通常就是DOM层 主要的作用就是给用户展示各种信息 Model层: 数据层 数据可能是我们固定的死数据,更多 ...

  7. 从几道题目带你深入理解Event Loop_宏队列_微队列

    目录 深入探究JavaScript的Event Loop Event Loop的结构 回调队列(callbacks queue)的分类 Event Loop的执行顺序 通过题目来深入 深入探究Java ...

  8. 向Vertex Shader传递vertex attribute

    在VBO.VAO和EBO那一节,介绍了如何向Vertex Shader传递vertex attribute的基本方法.现在我准备把这个话题再次扩展开. 传递整型数据 之前我们的顶点属性数据都是floa ...

  9. 成功的多项目管理都有哪些"制胜之道"?

    实施多项目管理,一个重要原因就是提高项目的效率和管理水平.除了满足时间.成本.业绩和客户需求之外,项目管理办公室(PMO)经理的预期产出还包括有效利用组织资源.下面是影响多项目管理成功的几个关键因素, ...

  10. copy和deep.copy

    https://blog.csdn.net/qq_32907349/article/details/52190796 加上crossin公众号上的可变对象与不可变对象 a=[1,2,3,[4]] b= ...