要求利用C语言的知识,运用结构、数组、链表等手段编写程序,完成一个中小型的管理信息系统(MIS)的设计和开发。具体要求如下: 1. 选题可以从学生学籍信息管理、图书资料管理、通讯录管理、超市商品目录管理、学生成绩管理等项目中任选一个。 2. 建立结构体保存单个数据的信息,建立线性表(数组或链表)存储全部数据的信息。 3. 信息的基本操作包括:添加、删除、查找、修改、排序等功能。 4. 通过菜单组织全部功能,提供良好的界面,方便用户使用。
时间: 2024-04-08 21:28:44 浏览: 218
根据你的要求,我可以为你提供一个关于学生学籍信息管理系统的设计和开发的方案。以下是一个简单的示例程序,使用了结构体和链表来实现学生信息的管理。你可以根据需要进行修改和扩展。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生结构体
typedef struct {
char name[50];
int age;
char gender[10];
char id[20];
} Student;
// 定义链表节点结构体
typedef struct Node {
Student data;
struct Node* next;
} Node;
// 全局变量,指向链表头节点
Node* head = NULL;
// 添加学生信息
void addStudent() {
Node* newNode = (Node*)malloc(sizeof(Node));
printf("请输入学生姓名:");
scanf("%s", newNode->data.name);
printf("请输入学生年龄:");
scanf("%d", &(newNode->data.age));
printf("请输入学生性别:");
scanf("%s", newNode->data.gender);
printf("请输入学生学号:");
scanf("%s", newNode->data.id);
newNode->next = head;
head = newNode;
printf("添加成功!\n");
}
// 删除学生信息
void deleteStudent() {
if (head == NULL) {
printf("链表为空,无法删除!\n");
return;
}
char id[20];
printf("请输入要删除的学生学号:");
scanf("%s", id);
Node* current = head;
Node* prev = NULL;
while (current != NULL) {
if (strcmp(current->data.id, id) == 0) {
if (prev == NULL) {
head = current->next;
} else {
prev->next = current->next;
}
free(current);
printf("删除成功!\n");
return;
}
prev = current;
current = current->next;
}
printf("未找到该学生学号,删除失败!\n");
}
// 查找学生信息
void searchStudent() {
if (head == NULL) {
printf("链表为空,无法查找!\n");
return;
}
char id[20];
printf("请输入要查找的学生学号:");
scanf("%s", id);
Node* current = head;
while (current != NULL) {
if (strcmp(current->data.id, id) == 0) {
printf("学生姓名:%s\n", current->data.name);
printf("学生年龄:%d\n", current->data.age);
printf("学生性别:%s\n", current->data.gender);
printf("学生学号:%s\n", current->data.id);
return;
}
current = current->next;
}
printf("未找到该学生学号!\n");
}
// 修改学生信息
void modifyStudent() {
if (head == NULL) {
printf("链表为空,无法修改!\n");
return;
}
char id[20];
printf("请输入要修改的学生学号:");
scanf("%s", id);
Node* current = head;
while (current != NULL) {
if (strcmp(current->data.id, id) == 0) {
printf("请输入学生姓名:");
scanf("%s", current->data.name);
printf("请输入学生年龄:");
scanf("%d", &(current->data.age));
printf("请输入学生性别:");
scanf("%s", current->data.gender);
printf("修改成功!\n");
return;
}
current = current->next;
}
printf("未找到该学生学号,修改失败!\n");
}
// 显示所有学生信息
void displayStudents() {
if (head == NULL) {
printf("链表为空,无法显示!\n");
return;
}
Node* current = head;
while (current != NULL) {
printf("学生姓名:%s\n", current->data.name);
printf("学生年龄:%d\n", current->data.age);
printf("学生性别:%s\n", current->data.gender);
printf("学生学号:%s\n", current->data.id);
current = current->next;
}
}
// 主菜单
void mainMenu() {
int choice;
do {
printf("\n********** 学生学籍信息管理系统 **********\n");
printf("1. 添加学生信息\n");
printf("2. 删除学生信息\n");
printf("3. 查找学生信息\n");
printf("4. 修改学生信息\n");
printf("5. 显示所有学生信息\n");
printf("0. 退出\n");
printf("请输入操作编号:");
scanf("%d", &choice);
switch (choice) {
case 1:
addStudent();
break;
case 2:
deleteStudent();
break;
case 3:
searchStudent();
break;
case 4:
modifyStudent();
break;
case 5:
displayStudents();
break;
case 0:
printf("感谢使用!\n");
break;
default:
printf("无效的操作编号,请重新输入!\n");
break;
}
} while (choice != 0);
}
// 主函数
int main() {
mainMenu();
return 0;
}
```
这个示例程序实现了一个简单的学生学籍信息管理系统,包括添加、删除、查找、修改和显示学生信息的功能。你可以根据具体需求进行修改和扩展,例如添加排序功能、保存数据到文件等。希望这个示例能对你有所帮助!
阅读全文