用c语言写一个中文系统,要求如下。学生档案管理系统 系统中的学生属性:学号,姓名,性别,出生日期,所在院系,班级名, 宿舍号码、电话号码等。其中出生日期可以使用结构体。 功能要求: 1、主菜单设计:按基本要求进行。 2、记录输入:对每个学生的学号、姓名、性别、出生日期、所在院系、班级名, 电话, 进行输入并存储在数据文件中。 3、显示记录:以列表方式显示全部记录。 4、维护记录。能够实现添加、删除、修改学生记录,结果存储到文件中。修改 纪录可以对任意记录的数据进行修改并在修改前后对记录内容进行显示;删除记 录可以删除文件中的任意一个纪录。 5、查询记录。根据学号、姓名、性别、班级等查询学生的信息。如:根据学号 显示某生的记录;根据姓名显示记录;根据性别、班级显示记录,可能有多个记 录。 6、统计记录。计算各班的人数,并以列表的方式显示;分别统计男女生人数。 7、设计学生数据记录
时间: 2024-04-12 12:32:52 浏览: 174
对于学生档案管理系统的需求,你可以使用 C 语言来实现。首先,你需要定义一个学生的结构体,包含学号、姓名、性别、出生日期、所在院系、班级名、宿舍号码和电话号码等属性。出生日期可以使用一个单独的结构体来表示。
接下来,你可以设计一个主菜单,用于展示系统的功能选项。主菜单可以包括以下选项:
1. 记录输入:允许用户输入学生的信息,并将其存储到数据文件中。
2. 显示记录:以列表的方式显示所有学生的记录。
3. 维护记录:允许用户添加、删除和修改学生的记录,并将结果存储到文件中。
4. 查询记录:根据学号、姓名、性别、班级等条件查询学生的信息。
5. 统计记录:计算各班的人数,并以列表的方式显示;同时统计男女生人数。
6. 退出系统:退出学生档案管理系统。
根据这些功能要求,你可以编写相应的 C 代码来实现。请注意,这只是一个简单的示例,你可以根据实际需求进行扩展和完善。
```c
#include <stdio.h>
#include <stdlib.h>
// 学生出生日期的结构体
struct Date {
int year;
int month;
int day;
};
// 学生的结构体
struct Student {
int id;
char name[50];
char gender[10];
struct Date birthDate;
char department[50];
char className[50];
int dormitoryNumber;
char phoneNumber[20];
};
// 全局变量,记录学生的数量
int studentCount = 0;
// 函数声明
void displayMainMenu();
void inputRecord(struct Student students[]);
void displayRecords(struct Student students[]);
void maintainRecords(struct Student students[]);
void queryRecords(struct Student students[]);
void countRecords(struct Student students[]);
int main() {
struct Student students[100]; // 最多支持100个学生的记录
int choice;
do {
displayMainMenu();
printf("请输入选项:");
scanf("%d", &choice);
printf("\n");
switch (choice) {
case 1:
inputRecord(students);
break;
case 2:
displayRecords(students);
break;
case 3:
maintainRecords(students);
break;
case 4:
queryRecords(students);
break;
case 5:
countRecords(students);
break;
case 6:
printf("谢谢使用!\n");
break;
default:
printf("无效的选项,请重新输入。\n");
}
printf("\n");
} while (choice != 6);
return 0;
}
void displayMainMenu() {
printf("========== 学生档案管理系统 ==========\n");
printf("1. 记录输入\n");
printf("2. 显示记录\n");
printf("3. 维护记录\n");
printf("4. 查询记录\n");
printf("5. 统计记录\n");
printf("6. 退出系统\n");
printf("=====================================\n");
}
void inputRecord(struct Student students[]) {
struct Student newStudent;
printf("请输入学生的学号:");
scanf("%d", &newStudent.id);
printf("请输入学生的姓名:");
scanf("%s", newStudent.name);
printf("请输入学生的性别:");
scanf("%s", newStudent.gender);
printf("请输入学生的出生日期(年 月 日):");
scanf("%d %d %d", &newStudent.birthDate.year, &newStudent.birthDate.month, &newStudent.birthDate.day);
printf("请输入学生的所在院系:");
scanf("%s", newStudent.department);
printf("请输入学生的班级名:");
scanf("%s", newStudent.className);
printf("请输入学生的宿舍号码:");
scanf("%d", &newStudent.dormitoryNumber);
printf("请输入学生的电话号码:");
scanf("%s", newStudent.phoneNumber);
students[studentCount++] = newStudent;
printf("记录输入成功!\n");
}
void displayRecords(struct Student students[]) {
if (studentCount == 0) {
printf("没有记录可供显示。\n");
return;
}
printf("学号\t姓名\t性别\t出生日期\t\t所在院系\t班级名\t宿舍号码\t电话号码\n");
for (int i = 0; i < studentCount; i++) {
struct Student student = students[i];
printf("%d\t%s\t%s\t%d-%02d-%02d\t%s\t%s\t%d\t%s\n",
student.id, student.name, student.gender,
student.birthDate.year, student.birthDate.month, student.birthDate.day,
student.department, student.className, student.dormitoryNumber, student.phoneNumber);
}
}
void maintainRecords(struct Student students[]) {
int choice;
int studentId;
printf("请输入要维护的学生的学号:");
scanf("%d", &studentId);
for (int i = 0; i < studentCount; i++) {
if (students[i].id == studentId) {
printf("1. 修改记录\n");
printf("2. 删除记录\n");
printf("请输入选项:");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("当前学生的记录:\n");
printf("学号\t姓名\t性别\t出生日期\t\t所在院系\t班级名\t宿舍号码\t电话号码\n");
printf("%d\t%s\t%s\t%d-%02d-%02d\t%s\t%s\t%d\t%s\n",
students[i].id, students[i].name, students[i].gender,
students[i].birthDate.year, students[i].birthDate.month, students[i].birthDate.day,
students[i].department, students[i].className, students[i].dormitoryNumber, students[i].phoneNumber);
printf("\n请输入修改后的信息:\n");
printf("请输入学生的学号:");
scanf("%d", &students[i].id);
printf("请输入学生的姓名:");
scanf("%s", students[i].name);
printf("请输入学生的性别:");
scanf("%s", students[i].gender);
printf("请输入学生的出生日期(年 月 日):");
scanf("%d %d %d", &students[i].birthDate.year, &students[i].birthDate.month, &students[i].birthDate.day);
printf("请输入学生的所在院系:");
scanf("%s", students[i].department);
printf("请输入学生的班级名:");
scanf("%s", students[i].className);
printf("请输入学生的宿舍号码:");
scanf("%d", &students[i].dormitoryNumber);
printf("请输入学生的电话号码:");
scanf("%s", students[i].phoneNumber);
printf("记录修改成功!\n");
break;
case 2:
for (int j = i; j < studentCount - 1; j++) {
students[j] = students[j + 1];
}
studentCount--;
printf("记录删除成功!\n");
break;
default:
printf("无效的选项。\n");
}
return;
}
}
printf("找不到指定学号的记录。\n");
}
void queryRecords(struct Student students[]) {
int choice;
char keyword[50];
printf("1. 根据学号查询\n");
printf("2. 根据姓名查询\n");
printf("3. 根据性别查询\n");
printf("4. 根据班级查询\n");
printf("请输入选项:");
scanf("%d", &choice);
printf("请输入关键字:");
scanf("%s", keyword);
int matchCount = 0;
switch (choice) {
case 1:
for (int i = 0; i < studentCount; i++) {
if (students[i].id == atoi(keyword)) {
printf("学号\t姓名\t性别\t出生日期\t\t所在院系\t班级名\t宿舍号码\t电话号码\n");
printf("%d\t%s\t%s\t%d-%02d-%02d\t%s\t%s\t%d\t%s\n",
students[i].id, students[i].name, students[i].gender,
students[i].birthDate.year, students[i].birthDate.month, students[i].birthDate.day,
students[i].department, students[i].className, students[i].dormitoryNumber, students[i].phoneNumber);
matchCount++;
}
}
break;
case 2:
for (int i = 0; i < studentCount; i++) {
if (strcmp(students[i].name, keyword) == 0) {
printf("学号\t姓名\t性别\t出生日期\t\t所在院系\t班级名\t宿舍号码\t电话号码\n");
printf("%d\t%s\t%s\t%d-%02d-%02d\t%s\t%s\t%d\t%s\n",
students[i].id, students[i].name, students[i].gender,
students[i].birthDate.year, students[i].birthDate.month, students[i].birthDate.day,
students[i].department, students[i].className, students[i].dormitoryNumber, students[i].phoneNumber);
matchCount++;
}
}
break;
case 3:
for (int i = 0; i < studentCount; i++) {
if (strcmp(students[i].gender, keyword) == 0) {
printf("学号\t姓名\t性别\t出生日期\t\t所在院系\t班级名\t宿舍号码\t电话号码\n");
printf("%d\t%s\t%s\t%d-%02d-%02d\t%s\t%s\t%d\t%s\n",
students[i].id, students[i].name, students[i].gender,
students[i].birthDate.year, students[i].birthDate.month, students[i].birthDate.day,
students[i].department, students[i].className, students[i].dormitoryNumber, students[i].phoneNumber);
matchCount++;
}
}
break;
case 4:
for (int i = 0; i < studentCount; i++) {
if (strcmp(students[i].className, keyword) == 0) {
printf("学号\t姓名\t性别\t出生日期\t\t所在院系\t班级名\t宿舍号码\t电话号码\n");
printf("%d\t%s\t%s\t%d-%02d-%02d\t%s\t%s\t%d\t%s\n",
students[i].id, students[i].name, students[i].gender,
students[i].birthDate.year, students[i].birthDate.month, students[i].birthDate.day,
students[i].department, students[i].className, students[i].dormitoryNumber, students[i].phoneNumber);
matchCount++;
}
}
break;
default:
printf("无效的选项。\n");
}
if (matchCount == 0) {
printf("找不到符合条件的记录。\n");
}
}
void countRecords(struct Student students[]) {
int maleCount = 0;
int femaleCount = 0;
int classCounts[100] = {0}; // 假设最多有100个班级
for (int i = 0; i < studentCount; i++) {
if (strcmp(students[i].gender, "男") == 0) {
maleCount++;
} else if (strcmp(students[i].gender, "女") == 0) {
femaleCount++;
}
classCounts[students[i].className]++;
}
printf("各班级人数统计:\n");
for (int i = 0; i < 100; i++) {
if (classCounts[i] > 0) {
printf("班级名:%d,人数:%d\n", i, classCounts[i]);
}
}
printf("男生人数:%d\n", maleCount);
printf("女生人数:%d\n", femaleCount);
}
```
以上是一个简单的学生档案管理系统的实现,你可以根据需要进行修改和扩展。请确保在使用之前对代码进行适当的测试和调试。希望能对你有所帮助!
阅读全文