学生信息管理系统设计 (1)问题描述 学生信息包括:学号、姓名、性别、宿舍号码、电话号码、成绩等。试设计一个学生信息管理系统,使之能提供以下功能: ² 系统以菜单方式工作 ² 学生信息录入功能(学生信息用文本文件保存)---输入 ² 学生信息浏览功能——输出 ² 查询功能——算法 1、按学号查询 2、按姓名查询 ² 排序功能 1、按分数升序排序 2、按分数降序排序 (2)功能要求 ² 界面简单明了; ² 有一定的容错能力,比如输入的成绩不在0~100之间,就提示不合法,要求重新输入; (3)算法分析 首先,一个学生包括这么多的属性,应该考虑定义一个结构,其次,我们应该考虑数据的存储形式,在这里假如我们以数组的方式来存储,首先必须知道学生人数大概是多少,以便我们确定数组的大小。 对于菜单的实现,其实也比较简单,首先我们用printf语句把程序的功能列出来,然后等待用户输入而执行不同的函数,执行完了一个功能后又回到菜单。文件的读写操作大家参照书中的有关文件的章节。 (4)保存在文件中的内容可以参考下面的形式 学号 姓名 性别 宿舍号码 电话号码 成绩 01 张成成 男 501 87732111 90 02 李成华 女 101 87723112 78 03 王成凤 女 101 87723112 85 04 张明明 男 502 87734333 60 05 陈东 男 501 87732111 96 06 李果 男 502 87734333 66 07 张园园 女 102 87756122 80 … … … … … …C语言设计
时间: 2024-02-14 21:13:39 浏览: 121
好的,这个问题需要涉及到C语言的设计。首先,我们可以定义一个结构体来存储学生信息,包括学号、姓名、性别、宿舍号码、电话号码和成绩。示例代码如下:
```c
struct student {
int id;
char name[20];
char gender[10];
int dormitory;
char phone[20];
float score;
};
```
接下来,我们可以使用数组来存储学生信息。在程序开始时,可以让用户输入学生人数,然后动态分配数组空间。示例代码如下:
```c
int n; // 学生人数
struct student *stu; // 学生信息数组
printf("请输入学生人数:");
scanf("%d", &n);
stu = (struct student*) malloc(n * sizeof(struct student));
```
现在我们可以开始实现各个功能了。
1. 学生信息录入功能
首先,我们需要让用户输入每个学生的信息。然后,将这些信息存储到数组中,并将数组中的信息写入到文本文件中。示例代码如下:
```c
for (int i = 0; i < n; i++) {
printf("请输入第%d个学生的信息:\n", i+1);
printf("学号:");
scanf("%d", &stu[i].id);
printf("姓名:");
scanf("%s", stu[i].name);
printf("性别:");
scanf("%s", stu[i].gender);
printf("宿舍号码:");
scanf("%d", &stu[i].dormitory);
printf("电话号码:");
scanf("%s", stu[i].phone);
printf("成绩:");
scanf("%f", &stu[i].score);
// 将学生信息写入文件
FILE *fp;
fp = fopen("students.txt", "a");
fprintf(fp, "%d %s %s %d %s %f\n", stu[i].id, stu[i].name, stu[i].gender, stu[i].dormitory, stu[i].phone, stu[i].score);
fclose(fp);
}
```
2. 学生信息浏览功能
我们可以从文件中读取学生信息,并将其输出到屏幕上。示例代码如下:
```c
FILE *fp;
fp = fopen("students.txt", "r");
if (fp != NULL) {
printf("学号\t姓名\t性别\t宿舍号码\t电话号码\t成绩\n");
while (!feof(fp)) {
fscanf(fp, "%d %s %s %d %s %f", &stu[i].id, stu[i].name, stu[i].gender, &stu[i].dormitory, stu[i].phone, &stu[i].score);
printf("%d\t%s\t%s\t%d\t%s\t%.2f\n", stu[i].id, stu[i].name, stu[i].gender, stu[i].dormitory, stu[i].phone, stu[i].score);
}
fclose(fp);
}
```
3. 按学号或姓名查询功能
我们可以让用户输入要查询的学号或姓名,然后从文件中查找对应的学生信息,并将其输出到屏幕上。示例代码如下:
```c
// 按学号查询
int id;
printf("请输入要查询的学生学号:");
scanf("%d", &id);
fp = fopen("students.txt", "r");
if (fp != NULL) {
while (!feof(fp)) {
fscanf(fp, "%d %s %s %d %s %f", &stu[i].id, stu[i].name, stu[i].gender, &stu[i].dormitory, stu[i].phone, &stu[i].score);
if (stu[i].id == id) {
printf("学号\t姓名\t性别\t宿舍号码\t电话号码\t成绩\n");
printf("%d\t%s\t%s\t%d\t%s\t%.2f\n", stu[i].id, stu[i].name, stu[i].gender, stu[i].dormitory, stu[i].phone, stu[i].score);
break;
}
}
fclose(fp);
}
// 按姓名查询
char name[20];
printf("请输入要查询的学生姓名:");
scanf("%s", name);
fp = fopen("students.txt", "r");
if (fp != NULL) {
while (!feof(fp)) {
fscanf(fp, "%d %s %s %d %s %f", &stu[i].id, stu[i].name, stu[i].gender, &stu[i].dormitory, stu[i].phone, &stu[i].score);
if (strcmp(stu[i].name, name) == 0) {
printf("学号\t姓名\t性别\t宿舍号码\t电话号码\t成绩\n");
printf("%d\t%s\t%s\t%d\t%s\t%.2f\n", stu[i].id, stu[i].name, stu[i].gender, stu[i].dormitory, stu[i].phone, stu[i].score);
break;
}
}
fclose(fp);
}
```
4. 按分数升序或降序排序
我们可以使用冒泡排序算法对学生信息进行排序。示例代码如下:
```c
// 按分数升序排序
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - 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 < n - 1; i++) {
for (int j = 0; j < n - 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;
}
}
}
```
这样,我们就完成了一个简单的学生信息管理系统的设计。需要注意的是,在实际开发中,我们需要加入更多的容错处理,比如输入的成绩不在0~100之间的情况。
阅读全文