原理

在一个班级学生成绩管理系统中,希望处理每个学生的学习情况信息,其中包括学生的学号、姓名、各科名称和成绩等
并能使管理人员通过界面完成对学生信息的录入及对学生信息的录入及对数据的查找、浏览、插入、排序、保存。
要求:
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. UVA11134传说中的车(放棋子)

    题意:       给你一个n*n的棋盘,让你在棋盘上放n个棋子,要求是所有棋子不能相互攻击(同行或者同列就会攻击),并且每个棋子都有一个限制,那就是必须在给定的矩形r[i]里,输出每个棋子的位置,s ...

  2. Windows核心编程 第七章 线程的调度、优先级和亲缘性(下)

    7.6 运用结构环境 现在应该懂得环境结构在线程调度中所起的重要作用了.环境结构使得系统能够记住线程的状态,这样,当下次线程拥有可以运行的C P U时,它就能够找到它上次中断运行的地方. 知道这样低层 ...

  3. C#可空类型及其衍生运算符

    这节讲一下C#可空类型(Nullable) 我们知道,值类型在使用前必须设置值,而引用类型则可以是null,但在某些情况下,为值类型设置为空是必要的(如处理数据库数据的时候),微软因此推出了可空类型  ...

  4. Visual Lab Online —— 事后分析

    项目 内容 班级:北航2020春软件工程 博客园班级博客 作业:事后分析 事后分析 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们的软件使得编写简 ...

  5. 要求用户输入若干员工信息,格式为: name,age,gender,salary,hiredate

    package day06; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util. ...

  6. [bug] vue cli 部署在 springboot中报404

    复制资源时,在static目录下新建了一个static目录,估计是引起了spring解析的混乱,改为one后即可正常访问 参考 https://www.cnblogs.com/qianjinyan/p ...

  7. [DB] SQL 必知必会

    整体架构 数据类型 文本类:CHAR.VARCHAR(可变长度字符,多使用).TEXT.LONGTEXT(文本较大时使用) 数字类:TINYINT.INT.BIGINT.FLOAT.DOUBLE 日期 ...

  8. 怎么用优启通安装win7 !!!!好好好20191020

    怎么用优启通安装win7 PE技术探索在国内属于前沿梯队.相关PE工具更新的非常及时,两个月一更新,很赞. 尤其是论坛代表作之一:EasyImageX系统备份恢复镜像工具(集成在PE里面),可以说是用 ...

  9. CentOS 7 设置默认进入字符界面

    CentOS 7 设置默认进入字符界面原创阳阳唐 最后发布于2018-10-18 10:12:51 阅读数 3363 收藏展开准备修改之前安装的centos7的默认启动方式,安装时是图形用户界面,想让 ...

  10. mysql基础之mysql主从架构半同步复制

    一.概念 1.异步复制(Asynchronous replication) MySQL默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已经接收并处理,这样 ...