学C一个月。做了一个简单的学生成绩管理系统。欢迎前来测试。
由于还没看链表。所以程序没使用到链表。这是本人学了C将近一个月后,花了一天做的。
欢迎大家前来测试。
此管理系统能实现1.载入成绩。2.成绩统计。3.显示成绩。4.查询成绩。
5.录入成绩。6.修改成绩。7.保存成绩。8.删除成绩。9.成绩排名。
代码VS2010已通过。
程序代码:#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int man;//学生人数
long long int t;//学生号数
char s[20];//文件名
struct student
{
long long int id;
char name[8];
char sex[2];
int n1;
int n2;
int n3;
int n4;
int zong;
float ping;
}stu[1000], temp;
void menu(void)
{
int i;
printf("----------------------------------by HelΙo-----------------------------------\n");
printf(" ");
for (i = 0; i< 50; i++)
printf("*");
printf("\n");
printf(" # #\n");
printf(" # 1.载入成绩 2.成绩统计 3.显示成绩 #\n");
printf(" # 4.查询成绩 5.录入成绩 6.修改成绩 #\n");
printf(" # 7.保存成绩 8.删除成绩 9.成绩排名 #\n");
printf(" # ‘+’键退出 按0键返回菜单 #\n");
printf(" # #\n");
printf(" ");
for (i = 0; i < 50; i++)
printf("*");
printf("\n");
}
void zairu(void)
{
FILE *wj;
int i;
man = 0;
printf("请输入要打开的文件,若不存在则创建.(文件名应包含扩展名):\n");
scanf("%s", s);
if ((wj = fopen(s, "at+")) == NULL)
{
printf("打开失败:\n");
}
for (i = 0; i < 1000; i++)
{
if (fscanf(wj, "%lld %s %s %d %d %d %d %d %f", &stu[i].id, stu[i].name, stu[i].sex, &stu[i].n1, &stu[i].n2, &stu[i].n3, &stu[i].n4, &stu[i].zong, &stu[i].ping) == -1)
break;
man++;
}
printf("从%s处读取了%d条记录.\n", s, man);
fclose(wj);
}
void xianshi(void)
{
int i;
printf(" ");
for (i = 0; i < 72; i++)
printf("*");
printf("\n");
printf("| 学号 姓名 性别 语 数 英 计算机 总 分 平均分 |\n");
for (i = 0; i < man; i++)
printf("|%-12lld %-6s %s %3d %3d %3d %3d %3d %6.2f |\n",stu[i].id, stu[i].name, stu[i].sex, stu[i].n1, stu[i].n2, stu[i].n3, stu[i].n4, stu[i].zong, stu[i].ping);
printf(" ");
for (i = 0; i < 72; i++)
printf("*");
printf("\n");
}
void tongji (void)
{
int i;
for (i = 0; i < man; i++)
{
stu[i].zong = stu[i].n1 + stu[i].n2 + stu[i].n3 + stu[i].n4;
stu[i].ping = float(stu[i].zong) / 4.0;
}
}
int luru(void)
{
int i, j;
i = 1;
while (1)
{
printf("是否录入?录入请按“1”,返回上一层请按0:\n");
scanf("%d", &j);
if (j == 1)
break;
else if (j == 0)
return 0;
else
printf("输入错误,请重新输入\n");
}
while(1)
{
man++;
printf("请输入要录入的第%d个的同学的相关信息(用空格键分开):\n", i);
printf(" 学号 姓名 性别 语 数 英 计算机\n");
scanf("%lld %s %s %d %d %d %d", &stu[man + i - 2].id, stu[man + i - 2].name, stu[man + i - 2].sex, &stu[man + i - 2].n1, &stu[man + i - 2].n2, &stu[man + i - 2].n3, &stu[man + i - 2].n4);
stu[man + i - 2].zong = stu[man + i - 2].n1 + stu[man + i - 2].n2 + stu[man + i - 2].n3 + stu[man + i - 2].n4;
stu[man + i - 2].ping = float(stu[man + i - 2].zong) / 4.0;
while(1)
{
printf("是否继续录入?继续请按“1”,返回菜单请按“0”\n");
scanf("%d", &j);
if (j == 1)
break;
else if (j == 0)
return 0;
else
printf("输入错误,请重新输入\n");
}
}
return 0;
}
int chaxun(void)
{
int i, j, k, l;
char a[12];
while (1)
{
printf("请选择按什么查询。\n1.按学号。\n2.按名字。\n");
scanf("%d", &i);
if (i == 1)
{
l = 0;
printf("请输入学号:\n");
scanf("%lld", &t);
for (i = 0; i < man; i++)
{
if (stu[i].id == t)
{
printf(" ");
for (k = 0; k < 72; k++)
printf("*");
printf("\n");
printf("| 学号 姓名 性别 语 数 英 计算机 总 分 平均分 |\n");
printf("|%-12lld %-6s %s %3d %3d %3d %3d %3d %6.2f |\n",stu[i].id, stu[i].name, stu[i].sex, stu[i].n1, stu[i].n2, stu[i].n3, stu[i].n4, stu[i].zong, stu[i].ping);
printf(" ");
for (k = 0; k < 72; k++)
printf("*");
printf("\n");
l++;//判断是否有查询到
break;
}
}
if (l == 0)
printf("查无此人\n");
}
else if (i == 2)
{
l = 0;
printf("请输入姓名:\n");
scanf("%s", a);
for (i = 0; i < man; i++)
{
if ((strcmp(stu[i].name, a) == 0))
{
printf(" ");
for (k = 0; k < 72; k++)
printf("*");
printf("\n");
printf("| 学号 姓名 性别 语 数 英 计算机 总 分 平均分 |\n");
printf("|%-12lld %-6s %s %3d %3d %3d %3d %3d %6.2f |\n",stu[i].id, stu[i].name, stu[i].sex, stu[i].n1, stu[i].n2, stu[i].n3, stu[i].n4, stu[i].zong, stu[i].ping);
printf(" ");
for (k = 0; k < 72; k++)
printf("*");
printf("\n");
l++;
break;
}
}
if (l != 1)
printf("查无此人\n");
}
else
printf("输入错误.\n");
printf("是否继续查询?是请按‘1’,否请按‘0’.\n");
scanf("%d", &j);
if (j == 1)
;
else if (j == 0)
return 0;
else
printf("输入错误\n");
}
}
int xiugai (void)
{
int i, j, k, l;
char a[12];
while(1)
{
printf("请选择序号:\n1.输入学号修改成绩。\n2.输入姓名修改成绩。\n");
scanf("%d", &j);
if (j == 1)
{
printf("请输入学号:\n");
scanf("%lld", &t);
l = 0;
for (i = 0; i < man; i++)
{
if (stu[i].id == t)
{
printf(" ");
for (k = 0; k < 72; k++)
printf("*");
printf("\n");
printf("| 学号 姓名 性别 语 数 英 计算机 总 分 平均分 |\n");
printf("|%-12lld %-6s %s %3d %3d %3d %3d %3d %6.2f |\n",stu[i].id, stu[i].name, stu[i].sex, stu[i].n1, stu[i].n2, stu[i].n3, stu[i].n4, stu[i].zong, stu[i].ping);
printf(" ");
for (k = 0; k < 72; k++)
printf("*");
printf("\n");
printf("请输入修改后的成绩依次为:\n");
printf("语文:\n");
scanf("%d", &stu[i].n1);
printf("数学:\n");
scanf("%d", &stu[i].n2);
printf("英语:\n");
scanf("%d", &stu[i].n3);
printf("计算机:\n");
scanf("%d", &stu[i].n4);
printf("修改后成绩为:\n");
stu[i].zong = stu[i].n1 + stu[i].n2 + stu[i].n3 + stu[i].n4;
stu[i].ping = float(stu[i].zong) / 4.0;
printf(" ");
for (k = 0; k < 72; k++)
printf("*");
printf("\n");
printf("| 学号 姓名 性别 语 数 英 计算机 总 分 平均分 |\n");
printf("|%-12lld %-6s %s %3d %3d %3d %3d %3d %6.2f |\n",stu[i].id, stu[i].name, stu[i].sex, stu[i].n1, stu[i].n2, stu[i].n3, stu[i].n4, stu[i].zong, stu[i].ping);
printf(" ");
for (k = 0; k < 72; k++)
printf("*");
printf("\n");
l++;//判断是否有查询到
break;
}
}
if (l == 0)
printf("查无此人\n");
}
else if (j == 2)
{
printf("请输入姓名:\n");
scanf("%s", a);
l = 0;
for (i = 0; i < man; i++)
{
if ((strcmp(stu[i].name, a) == 0))
{
printf(" ");
for (k = 0; k < 72; k++)
printf("*");
printf("\n");
printf("| 学号 姓名 性别 语 数 英 计算机 总 分 平均分 |\n");
printf("|%-12lld %-6s %s %3d %3d %3d %3d %3d %6.2f |\n",stu[i].id, stu[i].name, stu[i].sex, stu[i].n1, stu[i].n2, stu[i].n3, stu[i].n4, stu[i].zong, stu[i].ping);
printf(" ");
for (k = 0; k < 72; k++)
printf("*");
printf("\n");
printf("请输入修改后的成绩依次为:\n");
printf("语文:\n");
scanf("%d", &stu[i].n1);
printf("数学:\n");
scanf("%d", &stu[i].n2);
printf("英语:\n");
scanf("%d", &stu[i].n3);
printf("计算机:\n");
scanf("%d", &stu[i].n4);
printf("修改后成绩为:\n");
stu[i].zong = stu[i].n1 + stu[i].n2 + stu[i].n3 + stu[i].n4;
stu[i].ping = float(stu[i].zong) / 4.0;
printf(" ");
for (k = 0; k < 72; k++)
printf("*");
printf("\n");
printf("| 学号 姓名 性别 语 数 英 计算机 总 分 平均分 |\n");
printf("|%-12lld %-6s %s %3d %3d %3d %3d %3d %6.2f |\n",stu[i].id, stu[i].name, stu[i].sex, stu[i].n1, stu[i].n2, stu[i].n3, stu[i].n4, stu[i].zong, stu[i].ping);
printf(" ");
for (k = 0; k < 72; k++)
printf("*");
printf("\n");
l++;//判断是否有查询到
break;
}
}
if (l == 0)
printf("查无此人\n");
}
else
{
printf("输入错误:\n");
}
printf("是否继续修改?是请按‘1’,否请按‘0’.\n");
scanf("%d", &j);
if (j == 1)
;
else if (j == 0)
return 0;
else
printf("输入错误\n");
}
}
int paiming(void)
{
int i, j, k, l;
while(1)
{
printf("请选择按什么排列:\n1.学号。\n2.总分或平均分。\n3.单科排名。\n");
scanf("%d", &k);
if (k == 1)
{
for (i = 0; i< man; i++)
for (j = i + 1; j < man; j++)
{
if (stu[i].id > stu[j].id)
{
temp = stu[i];
stu[i] = stu[j];
stu[j] = temp;
}
}
return 0;
}
else if (k == 2)
{
for (i = 0; i< man - 1; i++)
for (j = i + 1; j < man; j++)
{
if (stu[i].zong < stu[j].zong)
{
temp = stu[i];
stu[i] = stu[j];
stu[j] = temp;
}
}
return 0;
}
else if (k == 3)
{
printf("请输入按哪一科排名?\n1.语文\n2.数学\n3.英语\n4.计算机\n");
scanf("%d", &l);
if (l == 1)
{
for (i = 0; i< man - 1; i++)
for (j = i + 1; j < man; j++)
{
if (stu[i].n1 < stu[j].n1)
{
temp = stu[i];
stu[i] = stu[j];
stu[j] = temp;
}
}
return 0;
}
else if (l == 2)
{
for (i = 0; i< man - 1; i++)
for (j = i + 1; j < man; j++)
{
if (stu[i].n2 < stu[j].n2)
{
temp = stu[i];
stu[i] = stu[j];
stu[j] = temp;
}
}
return 0;
}
else if (l == 3)
{
for (i = 0; i< man - 1; i++)
for (j = i + 1; j < man; j++)
{
if (stu[i].n3 < stu[j].n3)
{
temp = stu[i];
stu[i] = stu[j];
stu[j] = temp;
}
}
return 0;
}
else if (l == 4)
{
for (i = 0; i< man - 1; i++)
for (j = i + 1; j < man; j++)
{
if (stu[i].n4 < stu[j].n4)
{
temp = stu[i];
stu[i] = stu[j];
stu[j] = temp;
}
}
return 0;
}
else
{
printf("输入错误。\n");
return 0;
}
}
else
printf("输入错误,请重新输入。\n");
}
}
int baocun(void)
{
FILE *fp;
int i, t;
char a[20];
while(1)
{
printf("是否确认保存?确认请按‘1’,返回请按‘0’。\n");
scanf("%d", &t);
if (t == 1)
break;
else if (t == 0)
return 0;
else printf("输入错误,请重新输入。\n");
}
printf("请输入文件名,若文件已存在则覆盖(文件名应含扩展名):\n");
scanf("%s", a);
fp = fopen(a,"w");
for (i = 0; i < man; i++)
fprintf(fp, "%lld %s %s %d %d %d %d %d %f\n",stu[i].id, stu[i].name, stu[i].sex, stu[i].n1, stu[i].n2, stu[i].n3, stu[i].n4, stu[i].zong, stu[i].ping);
fclose(fp);
printf("保存完毕\n");
printf("在文件%s处储存了%d条记录.\n", a, man);
return 0;
}
int shanchu(void)
{
int i, j, l, m;
char a[12];
while (1)
{
printf("请选择按什么删除。\n1.按学号。\n2.按名字。\n");
scanf("%d", &i);
if (i == 1)
{
l = 0;
printf("请输入学号:\n");
scanf("%lld", &t);
while(1)
{
printf("确定删除?确定请按‘1’,取消请按‘0’。\n");
scanf("%d", &m);
if (m == 1)
break;
else if (m == 0)
return 0;
else printf("输入错误,请重新输入:\n");
}
for (i = 0; i < man; i++)
{
if (stu[i].id == t)
{
for(; i < man - 1;i++)
stu[i] = stu[i + 1];
man--;//总人数减1
l++;//判断是否有此人
break;
}
}
if (l == 0)
printf("查无此人\n");
}
else if (i == 2)
{
l = 0;
printf("请输入姓名:\n");
scanf("%s", a);
while(1)
{
printf("确定删除?确定请按‘1’,取消请按‘0’。\n");
scanf("%d", &m);
if (m == 1)
break;
else if (m == 0)
return 0;
else printf("输入错误,请重新输入:\n");
}
for (i = 0; i < man; i++)
{
if ((strcmp(stu[i].name, a) == 0))
{
for(; i < man - 1;i++)
stu[i] = stu[i + 1];
man--;//总人数减1
l++;//判断是否有此人
break;
}
}
if (l != 1)
printf("查无此人\n");
}
else
printf("输入错误.\n");
printf("是否继续删除?是请按‘1’,否请按‘0’.\n");
scanf("%d", &j);
if (j == 1)
;
else if (j == 0)
return 0;
else
printf("输入错误\n");
}
}
int main(void)
{
menu();
char i;
while(1)
{
printf("请输入要使用的功能的序号:\n");
scanf("%c", &i);
if (i == '1')
{
zairu();
system("pause");
system("cls");
menu();
printf("已载入。\n");
}
else if (i == '2')
{
tongji();
xianshi();
system("pause");
system("cls");
menu();
}
else if (i == '3')
{
xianshi();
system("pause");
system("cls");
menu();
}
else if (i == '4')
{
chaxun();
system("pause");
system("cls");
menu();
}
else if (i == '5')
{
luru();
xianshi();
system("pause");
system("cls");
menu();
printf("已录入。\n");
}
else if (i == '6')
{
xiugai();
system("pause");
system("cls");
menu();
printf("已修改。\n");
}
else if (i == '7')
{
baocun();
system("pause");
system("cls");
menu();
printf("已保存。\n");
}
else if (i == '8')
{
shanchu();
system("pause");
system("cls");
menu();
printf("已删除。\n");
}
else if (i == '9')
{
paiming();
xianshi();
system("pause");
system("cls");
menu();
}
else if (i == '0')
{
menu();
system("pause");
system("cls");
menu();
}
else if (i == '+')
exit(1);
getchar();//防止出现两条“请输入要使用的序号(按‘0’键显示菜单):”
}
return 0;
}[ 本帖最后由 a85703559 于 2011-4-21 22:36 编辑 ]







都没人来给点意见.......

