学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; }
学生成绩管理系统.rar
(11.62 KB)
[ 本帖最后由 a85703559 于 2011-4-21 22:36 编辑 ]