学⽣成绩管理系统-C语⾔(附源码)
这是我初学C时的期末作业,贴出来。
系统功能层次图
在这⾥插⼊图⽚描述
源代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//
头⽂件
#include
#include
#include
#include
//
成绩结构体
struct score
{
char snum[9];
char sname[11];
int chinese;
int math;
int english;
int sumcj;//
成绩总数
int rank;//
排名
};
//
函数声明
void showmenu(void);//
菜单
int xg(int);//
修改成绩
void lr(int);//
录⼊成绩
void cx(int);//
查询成绩
void xhcx(int);//
学号查询
void xmcx(int n);//
姓名查询
void allrankcx(int);//
排名查询
void showcxmenu(void);//
⼆级菜单,查询菜单
void xs(int);//
成绩显⽰
void jspm(int);//
计算排名
int sc(int);//
删除成绩
void bccj(void);//
保存成绩并退出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
//main
函数
int main()
{
int flag,n=0,count=0;//flag,count,
标志位计数当前总⼈数
//---------------------------------//
判断⽂件⾥⾯有多少条记录
FILE *fp;
fp=fopen("","a+");
if(fp==ULL)
{
printf("打开⽂件失败,请重试!n");
getch();
fclose(fp);
exit(0);
}
int c = 0;
while(!feof(fp))
{
char cc = fgetc(fp);
if(cc==EOF)
{
break;
}
//
输出字符
// putchar(cc);
c++;
}
count = c/14;
// printf("%d", count);
// getch();
fclose(fp);
//---------------------------------//
do
{
showmenu();
scanf("%d",&flag);//
选择操作
switch(flag)
{
case 1: printf("请输⼊您要录⼊的⼈数:");
scanf("%d",&n);
lr(n);
count += n;break;
case 2: count=sc(count);break;
case 3: xg(count);break;
case 4: cx(count);break;
case 5: jspm(count);break;
case 6: xs(count);break;
case 0: bccj();break;
default:printf("输⼊错误,请重试!n");getch();
}
}while(flag!=0);
getch();
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//0
显⽰菜单
void showmenu()
{
system("cls");
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("* 0: 保存信息并退出系统 *n");
printf("*----------------------------------------------------*n");
printf("选择操作<0-6> n");
return;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
//1
录⼊成绩
void lr(int n)
{
struct score stu[100];
FILE *fp;
fp=fopen("","a+");
if(fp==ULL)
{
printf("打开⽂件失败,请重试!n");
getch();
fclose(fp);
exit(0);
}
printf("请输⼊全部学⽣的学号,姓名,语⽂成绩,数学成绩,英语成绩;n");
int i;
for(i=0;i<n;i++)
{
printf("----第%d个学⽣----n", i+1);
printf("学号:");
scanf("%s",&stu[i].snum);
printf("姓名:");
scanf("%s,",&stu[i].sname);
printf("语⽂成绩:");
scanf("%d",&stu[i].chinese);
printf("数学成绩:");
scanf("%d",&stu[i].math);
printf("英语成绩:");
scanf("%d",&stu[i].english);
stu[i].sumcj=0;
stu[i].rank=0;
//
写⼊数据
fprintf(fp,"%s %s %d %d %d %d %dn",stu[i].snum,stu[i].sname,stu[i].chinese,stu[i].math,stu[i].english,stu[i].sumcj,stu[i].rank);}
fclose(fp);
printf("添加学⽣成功,请按任意键返回n");
getch();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//2
删除成绩
int sc(int n)
{
struct score stu[100];
struct score sub[99];//
删除后的结构体数组
char stnum[9];//
学号
int find=0;
printf("请输⼊你要删除的学⽣学号:");
scanf("%s", &stnum);
FILE *fp;
fp=fopen("","r");
if(fp==ULL)
{
printf("打开⽂件失败,请联系管理员n");
getch();
return -1;
}
int c=0;
int index=0;//
⽤于记录⽬标序号
while(!feof(fp))//
不为空
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
while(!feof(fp))//
不为空
{
fscanf(fp,"%s %s %d %d %d %d %dn", &stu[c].snum,&stu[c].sname,&stu[c].chinese,&stu[c].math,&stu[c].english,&stu[c].sumcj,&stu[c].rank);
if(strcmp(stnum,stu[c].snum)==0)
{
find = 1;//1
根据学号查,到赋值为
index = c;//
记录编号
}
c++;
}
fclose(fp);
if(n==0)
{
printf("已经没有学⽣成绩信息了,请按任意键返回n");
getch();
showmenu();
return n;
}
if(find==0)
{
printf("没有该学⽣成绩信息,请按任意键返回n");
getch();
showmenu();
return n;
}
else
{
int i;
//
删除
for(i=0;i<c;i++)
{
if(i < index)
{
sub[i] = stu[i];
}
else
{
sub[i] = stu[i+1];
}
}
fp=fopen("","w");
//
写⼊数据
for(i=0;i<c-1;i++)
{
fprintf(fp,"%s %s %d %d %d %d %dn",sub[i].snum,sub[i].sname,sub[i].chinese,sub[i].math,sub[i].english,sub[i].sumcj,sub[i].rank);
}
fclose(fp);
printf("学号为%s的学⽣成绩删除成功,请按任意键返回n",stnum);
getch();
showmenu();
return n-1;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
//3
修改成绩
int xg(int n)
{
struct score stu[100];
FILE *fp;
char stnum[9];
int find=0;
printf("请输⼊要修改的学⽣学号:");
scanf("%s",stnum);
fp=fopen("","r");
if(fp==ULL)
{
printf("⽂件打开失败,请联系管理员n");
getch();
return -1;
}
int c=0;
while(!feof(fp))
{
fscanf(fp,"%s %s %d %d %d %d %dn",&stu[c].snum,&stu[c].sname,&stu[c].chinese,&stu[c].math,&stu[c].english,&stu[c].sumcj,&stu[c].rank);
if(strcmp(stnum,stu[c].snum)==0)
{
find=1;
//
修改操作
printf("到你要修改成绩的同学,请输⼊他的成绩:n");
printf("语⽂成绩: %d,新成绩为:",stu[c].chinese);
scanf("%d",&stu[c].chinese);
printf("数学成绩: %d,新成绩为:",stu[c].math);
scanf("%d",&stu[c].math);
printf("英语成绩: %d,新成绩为:",stu[c].english);
scanf("%d",&stu[c].english);
}
c++;
}
fclose(fp);
if(find==0)
{
printf("没有到要删除的学⽣记录,请按任意键退出n");
getch();
}
else
{
fp=fopen("","w");
int i;
for(i=0;i<n;i++)
{
//
更新数据
fprintf(fp,"%s %s %d %d %d %d %dn",stu[i].snum,stu[i].sname,stu[i].chinese,stu[i].math,stu[i].english,stu[i].sumcj,stu[i].rank);
}
fclose(fp);
printf("学号为%s同学的成绩已经修改成功,请按任意键返回",stnum);
getch();
}
showmenu();
return 1;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//4
成绩查询
void cx(int n) //n
全班⼈数
{
int k;
do
{
showcxmenu();
scanf("%d",&k);
switch(k)
{
case 1:xhcx(n);break;//
学号查询
case 2:xmcx(n);break;//
姓名查询
case 3:allrankcx(n);break;//
全班排名查询
case 0:break;
default:printf("输⼊错误,请重新选择n");getch();
}
}while(k!=0);
return;
}
//4.0
查询菜单
void showcxmenu()
{
system("cls");
printf("*----------------------------------------------------*n");
printf("* 成绩查询菜单 *n");
printf("*----------------------------------------------------*n");
printf("* 1: 按学号查询 *n");
printf("* 2: 按姓名查询 *n");
printf("* 3: 全班排名查询 *n");
printf("* 0: 退出查询系统,返回主系统 *n");
printf("*----------------------------------------------------*n");
printf("选择操作<0-3> n");
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//4.1
学号查询
void xhcx(int n)
{
struct score stu[100];
char snum[9];
printf("请输⼊你要查询学⽣的学号:");
scanf("%s",&snum);
FILE *fp;
fp=fopen(" ","r");
if(fp==ULL)
{
printf("打开⽂件失败!n");
getch();
exit(0);
}
int c = 0;
while(!feof(fp)){
fscanf(fp,"%s %s %d %d %d %d %dn",&stu[c].snum,&stu[c].sname,&stu[c].chinese,&stu[c].math,&stu[c].english,&stu[c].sumcj,&stu[c].rank);
c++;
}
int i;
for(i=0;i<n;i++)
{
if(strcmp(snum,stu[i].snum)==0)
{
printf("学号t姓名t语⽂t数学t英语t总分t名次n");
printf("%st%st%dt%dt%dt%dt%dn",stu[i].snum,stu[i].sname,stu[i].chinese,stu[i].math,stu[i].english,stu[i].sumcj,stu[i].rank);
printf("按任意键返回n");
getch();
fclose(fp);
return;
}
}
printf("未到要查询学⽣的成绩,请重试!n");
getch();
fclose(fp);
return;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//4.2
姓名查询
void xmcx(int n)
{
struct score stu[100];
char sname[11];
printf("请输⼊你要查询学⽣的姓名:");
scanf("%s",&sname);
FILE *fp;
fp=fopen(" ","r");
if(fp==ULL)
{
printf("打开⽂件失败!n");
getch();
exit(0);
}
int c = 0;
while(!feof(fp)){
fscanf(fp,"%s %s %d %d %d %d %dnn",&stu[c].snum,&stu[c].sname,&stu[c].chinese,&stu[c].math,&stu[c].english,&stu[c].sumcj,&stu[c].rank);
c++;
}
int i;
for(i=0;i<n;i++)
{
if(strcmp(sname,stu[i].sname)==0)
{
printf("学号t姓名t语⽂t数学t英语t总分t名次n");
printf("%st%st%dt%dt%dt%dt%dn",stu[i].snum,stu[i].sname,stu[i].chinese,stu[i].math,stu[i].english,stu[i].sumcj,stu[i].rank);
printf("按任意键返回n");
getch();
fclose(fp);
return;
}
}
printf("未到要查询学⽣的成绩,请重试!n");
getch();
fclose(fp);
return;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
//4.3
全班排名查询
void allrankcx(int n)
{
struct score stu[100];
struct score temp;
FILE *fp;
fp=fopen(" ","r");
if(fp==ULL)
{
printf("打开⽂件失败!n");
getch();
exit(0);
}
int c = 0;
while(!feof(fp)){
fscanf(fp,"%s %s %d %d %d %d %dn",&stu[c].snum,&stu[c].sname,&stu[c].chinese,&stu[c].math,&stu[c].english,&stu[c].sumcj,&stu[c].rank);
c++;
}
int i,j;
for(i=0;i<n;i++)
{
if(stu[i].rank == 0){
printf("请先进⾏成绩计算进⾏排名!!n");
getch();
fclose(fp);
return;
}
stu[i].sumcj = stu[i].chinese + stu[i].math + stu[i].english;
// n-1
冒泡排序算法:进⾏轮⽐较
for(i=0; i<n-1; i++){
// n-1-i i
每⼀轮⽐较前个,也就是说,已经排序好的最后个不⽤⽐较
for(j=0; j<n-1-i; j++){
if(stu[j].sumcj > stu[j+1].sumcj){
temp = stu[j];
stu[j] = stu[j+1];
stu[j+1] = temp;
}
}
}
printf("学号t姓名t语⽂t数学t英语t总分t名次n");
for(i=0;i<n;i++)
{
printf("%st%st%dt%dt%dt%dt%dn",stu[i].snum,stu[i].sname,stu[i].chinese,stu[i].math,stu[i].english,stu[i].sumcj,stu[i].rank);
}
printf("按任意键返回n");
getch();
fclose(fp);
return;
}
printf("查询失败,请重试!n");
getch();
fclose(fp);
return;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
//5
计算排名函数
void jspm(int n)
{
struct score stu[100];
int i,j,temp;
int count;
FILE *fp;
fp=fopen("","r");
if(fp==ULL)
{
printf("打开⽂件失败!n");
getch();
exit(0);
}
int c = 0;
while(!feof(fp)){
fscanf(fp,"%s %s %d %d %d %d %dn",&stu[c].snum,&stu[c].sname,&stu[c].chinese,&stu[c].math,&stu[c].english,&stu[c].sumcj,&stu[c].rank);
stu[c].sumcj = stu[c].chinese + stu[c].math + stu[c].english;
c++;
}
fclose(fp);
//
计算排名并存储
for(i=0;i<n;i++)
{
temp=1;//1
第名
for(j=0;j<n;j++){
if(stu[i].sumcj<stu[j].sumcj) temp++;//1
如果较⼩,排名下降名
}
stu[i].rank=temp;
}
//
更新记录
fp=fopen("","w");
for(i=0;i<n;i++)
{
fprintf(fp,"%s %s %d %d %d %d %dn",stu[i].snum,stu[i].sname,stu[i].chinese,stu[i].math,stu[i].english,stu[i].sumcj,stu[i].rank);
}
fclose(fp);
printf("数据重新计算和排名成功,请按任意键返回主菜单。n");
getch();
return;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//6
显⽰成绩信息
void xs(int n)
{
struct score stu[100];
int i;
printf("成绩信息如下:n");
FILE *fp;
fp=fopen("","r");
if(fp==ULL)
{
printf("打开⽂件失败,请重试!n");
getch();
fclose(fp);
exit(0);
}
printf("学号t姓名t语⽂t数学t英语t总分t名次n");
int c = 0;
while(!feof(fp))
{
fscanf(fp,"%s %s %d %d %d %d %dn",&stu[c].snum,&stu[c].sname,&stu[c].chinese,&stu[c].math,&stu[c].english,&stu[c].sumcj,&stu[c].rank);
c++;
}
if(n!=0){//0
⼈数不为
for(i=0;i<c;i++)
{
printf("%st%st%dt%dt%dt%dt%dn",stu[i].snum,stu[i].sname,stu[i].chinese,stu[i].math,stu[i].english,stu[i].sumcj,stu[i].rank);
}
}
fclose(fp);
printf("显⽰完毕 ,请按任意键返回n");
getch();
return;
}
1
2
3
4
5
6
7
8
9
//0
保存信息并退出系统
void bccj()
{
printf("感谢您的使⽤,欢迎下次使⽤!n");
getch();
return;
}
系统⽂件
开发环境
操作系统:Windows10
开发⼯具:Dev-C++
PS:限于本⼈⽔平,如有不⾜还请批评、指出。源码?拿⾛,拿⾛。
提醒:由于⽹友反馈,经过⾃⼰的调试,发现诸多问题,部分代码不规范,逻辑错误等等,不堪⼊⽬,绝不是个良好的程序,但因近
期忙于答辩,代码的修改估计在本⽉⽉底。在这之前我可能⽆暇关注博客,对此给⼤家造成困扰,深感抱歉。——2020.5.18
更新:已对代码进⾏优化,经过简单调试,没有发现⼤问题,相信能够满⾜部分同学的期末作业要求了。源码⽂件已更新。——
2020.5.29
修复BUG:修复删除成绩后,查询成绩信息异常的问题。源码已更新,请重新下载。——2020.6.19 PS:C学得真的是太菜了,请
⼤家多多包涵!!/抱拳/抱拳。。
代码细节优化:考虑到开发⼯具的兼容问题,已将getch()函数的头⽂件(conio.h)添加到源代码。函数声明、定义漏写问题(其实
是忘了改函数名了)。判断等于ULL报警告?其实该判断是否等于0,⼤意啊
本文发布于:2023-05-23 14:42:03,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/falv/fa/87/100626.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |