利用C语言,设计编写一个传统的小型学生信息管理系统。1、该系统可以用于管理一个班的学生信息。学生人数在50人左右。2、该系统存放了有关学生的某些方面的信息:如学号、姓名、性别、出生日期、成绩、所在系等,具体包含的数据内容由设计者分析确定。3、所有学生信息的数据结构及其存储结构由设计者分析确定。4、所有学生的信息数据可以用文件形式存放。(可选项)5、该系统具有相关的数据输入、输出、查询、修改、插入、删除、统计、排序等功能。(功能的多少设计者可根据需要自行调整,但必须具备输出、输出、查询、某一方面数据统计的基本功能。)6、系统应具有友好的用户界面,并能够让用户通过菜单进行相应功能的选择。7、上机实验前进行系统分析和设计。8、选用适当的算法和数据结构,建立相应的程序代码。9、上机调试通过,验证自己编写的程序的结果与预料效果之间的关系。
时间: 2023-07-10 07:32:34 浏览: 92
好的,这是一个比较大的项目,需要分步骤实现。我会给出一个简单的实现方案,你可以根据自己的需要进行修改和完善。
1. 确定学生信息的数据结构和存储结构,可以使用结构体来存储每个学生的信息,例如:
```
struct Student {
int id; // 学号
char name[20]; // 姓名
char gender[5]; // 性别
char birthday[20]; // 出生日期
float score; // 成绩
char department[20]; // 所在系
};
```
2. 定义菜单功能,例如:
```
void showMenu() {
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");
}
```
3. 添加学生信息功能。可以使用文件来存储学生信息,每次添加学生信息时,将新的学生信息追加到文件末尾即可。
```
void addStudent() {
FILE *fp = fopen("student.txt", "a");
if (fp == NULL) {
printf("文件打开失败\n");
return;
}
struct Student stu;
printf("请输入学号:");
scanf("%d", &stu.id);
printf("请输入姓名:");
scanf("%s", stu.name);
printf("请输入性别:");
scanf("%s", stu.gender);
printf("请输入出生日期:");
scanf("%s", stu.birthday);
printf("请输入成绩:");
scanf("%f", &stu.score);
printf("请输入所在系:");
scanf("%s", stu.department);
fprintf(fp, "%d %s %s %s %.1f %s\n", stu.id, stu.name, stu.gender, stu.birthday, stu.score, stu.department);
fclose(fp);
printf("添加成功\n");
}
```
4. 修改学生信息功能。先查询对应学号的学生信息是否存在,如果存在,则修改该学生的信息。
```
void modifyStudent() {
int id;
printf("请输入要修改的学生学号:");
scanf("%d", &id);
FILE *fp = fopen("student.txt", "r");
FILE *fp2 = fopen("temp.txt", "w");
if (fp == NULL || fp2 == NULL) {
printf("文件打开失败\n");
return;
}
struct Student stu;
int flag = 0;
while (fscanf(fp, "%d %s %s %s %f %s\n", &stu.id, stu.name, stu.gender, stu.birthday, &stu.score, stu.department) != EOF) {
if (stu.id == id) {
flag = 1;
printf("请输入新的姓名:");
scanf("%s", stu.name);
printf("请输入新的性别:");
scanf("%s", stu.gender);
printf("请输入新的出生日期:");
scanf("%s", stu.birthday);
printf("请输入新的成绩:");
scanf("%f", &stu.score);
printf("请输入新的所在系:");
scanf("%s", stu.department);
fprintf(fp2, "%d %s %s %s %.1f %s\n", stu.id, stu.name, stu.gender, stu.birthday, stu.score, stu.department);
printf("修改成功\n");
} else {
fprintf(fp2, "%d %s %s %s %.1f %s\n", stu.id, stu.name, stu.gender, stu.birthday, stu.score, stu.department);
}
}
if (!flag) {
printf("该学生信息不存在\n");
}
fclose(fp);
fclose(fp2);
remove("student.txt");
rename("temp.txt", "student.txt");
}
```
5. 删除学生信息功能。先查询对应学号的学生信息是否存在,如果存在,则将该学生的信息从文件中删除。
```
void deleteStudent() {
int id;
printf("请输入要删除的学生学号:");
scanf("%d", &id);
FILE *fp = fopen("student.txt", "r");
FILE *fp2 = fopen("temp.txt", "w");
if (fp == NULL || fp2 == NULL) {
printf("文件打开失败\n");
return;
}
struct Student stu;
int flag = 0;
while (fscanf(fp, "%d %s %s %s %f %s\n", &stu.id, stu.name, stu.gender, stu.birthday, &stu.score, stu.department) != EOF) {
if (stu.id == id) {
flag = 1;
printf("删除成功\n");
} else {
fprintf(fp2, "%d %s %s %s %.1f %s\n", stu.id, stu.name, stu.gender, stu.birthday, stu.score, stu.department);
}
}
if (!flag) {
printf("该学生信息不存在\n");
}
fclose(fp);
fclose(fp2);
remove("student.txt");
rename("temp.txt", "student.txt");
}
```
6. 查询学生信息功能。根据学号查询对应学生的信息。
```
void queryStudent() {
int id;
printf("请输入要查询的学生学号:");
scanf("%d", &id);
FILE *fp = fopen("student.txt", "r");
if (fp == NULL) {
printf("文件打开失败\n");
return;
}
struct Student stu;
int flag = 0;
while (fscanf(fp, "%d %s %s %s %f %s\n", &stu.id, stu.name, stu.gender, stu.birthday, &stu.score, stu.department) != EOF) {
if (stu.id == id) {
flag = 1;
printf("学号:%d\n姓名:%s\n性别:%s\n出生日期:%s\n成绩:%.1f\n所在系:%s\n", stu.id, stu.name, stu.gender, stu.birthday, stu.score, stu.department);
break;
}
}
if (!flag) {
printf("该学生信息不存在\n");
}
fclose(fp);
}
```
7. 统计学生成绩功能。计算所有学生的平均成绩和总成绩。
```
void calculateScore() {
FILE *fp = fopen("student.txt", "r");
if (fp == NULL) {
printf("文件打开失败\n");
return;
}
struct Student stu;
float total = 0.0;
int count = 0;
while (fscanf(fp, "%d %s %s %s %f %s\n", &stu.id, stu.name, stu.gender, stu.birthday, &stu.score, stu.department) != EOF) {
total += stu.score;
count++;
}
printf("总成绩:%.1f,平均成绩:%.1f\n", total, total / count);
fclose(fp);
}
```
8. 排序学生成绩功能。按照成绩从高到低排序输出所有学生的信息。
```
void sortScore() {
FILE *fp = fopen("student.txt", "r");
if (fp == NULL) {
printf("文件打开失败\n");
return;
}
struct Student stu[50];
int count = 0;
while (fscanf(fp, "%d %s %s %s %f %s\n", &stu[count].id, stu[count].name, stu[count].gender, stu[count].birthday, &stu[count].score, stu[count].department) != EOF) {
count++;
}
for (int i = 0; i < count - 1; i++) {
for (int j = 0; j < count - i - 1; j++) {
if (stu[j].score < stu[j + 1].score) {
struct Student temp = stu[j];
stu[j] = stu[j + 1];
stu[j + 1] = temp;
}
}
}
for (int i = 0; i < count; i++) {
printf("学号:%d,姓名:%s,性别:%s,出生日期:%s,成绩:%.1f,所在系:%s\n", stu[i].id, stu[i].name, stu[i].gender, stu[i].birthday, stu[i].score, stu[i].department);
}
fclose(fp);
}
```
9. 主函数中实现菜单功能,根据用户选择调用相应的功能函数。
```
int main() {
int choice;
while (1) {
showMenu();
printf("请输入您的选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
addStudent();
break;
case 2:
modifyStudent();
break;
case 3:
deleteStudent();
break;
case 4:
queryStudent();
break;
case 5:
calculateScore();
break;
case 6:
sortScore();
break;
case 0:
printf("谢谢使用,再见!\n");
return 0;
default:
printf("输入错误,请重新输入!\n");
break;
}
}
return 0;
}
```
这样,一个简单的学生信息管理系统就完成了。当然,这只是一个简单的示例,你可以根据自己的需要进行修改和完善。
阅读全文