项目描述
现有学生宿舍3栋,每年收费为1200元。试设计-宿舍管理系统,使之能提供以下功能:
1)系统以菜单方式工作(用键盘输入1~7之间的数来选择功能,其中7为退出);
2)学生住宿信息录入功能(楼号、楼层、房间号、姓名、入住年限),输入8-10条记录信息:3)宿舍信息整体浏览功能:
4)根据给定的“楼号”显示该楼居住学生人数:
5)根据入住人数统计收费总额功能;
6)根据给定的“房间号”修改学生姓名信息:
7)根据“姓名”升序排序:
8)根据给定的学生“姓名”删除该学生的入住信息;
9)所有数据符合实际应用要求。
题目要求
1)按分析、设计、编码、调试和测试的软件开发过程完成这个应用程序。
2)为各项操作功能设计一个菜单。应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目。
3)界面应友好,操作应流畅。
输入要求
应用程序运行后,在屏幕上显示一个菜单。
用户可以根据需求,选定相应的操作项目。
进入每个操作后,一般应有相应的子菜单,或有相应的提示信息,根据提示信息的要求,从键盘或文件输入相应的信息。
输出要求
1)应用程序运行后,要在屏幕上显示一个菜单。
2)要求用户输入数据时,要给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等。提示设计一个结构体类型和一维数组类型,用来存放学生入住信息。
实现代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 10
// 学生结构体
typedef struct {
int building;
int floor;
int room;
char name[50];
int duration;
} Student;
// 全局变量
Student students[MAX_STUDENTS]; // 存放学生信息的数组
int numStudents = 0; // 当前学生数量
// 菜单函数
void displayMenu() {
printf("\n--- 宿舍管理系统 ---\n");
printf("1. 学生住宿信息录入\n");
printf("2. 宿舍信息整体浏览\n");
printf("3. 根据楼号显示学生人数\n");
printf("4. 统计收费总额\n");
printf("5. 修改学生姓名\n");
printf("6. 按姓名排序\n");
printf("7. 删除学生信息\n");
printf("8. 退出\n");
printf("请选择功能(1-8): ");
}
// 功能函数:学生住宿信息录入
void addStudent() {
if (numStudents >= MAX_STUDENTS) {
printf("学生信息已满,无法继续添加!\n");
return;
}
printf("\n--- 学生住宿信息录入 ---\n");
printf("请输入楼号: ");
scanf("%d", &students[numStudents].building);
printf("请输入楼层: ");
scanf("%d", &students[numStudents].floor);
printf("请输入房间号: ");
scanf("%d", &students[numStudents].room);
printf("请输入姓名: ");
scanf("%s", students[numStudents].name);
printf("请输入入住年限: ");
scanf("%d", &students[numStudents].duration);
numStudents++;
printf("学生住宿信息录入成功!\n");
}
// 功能函数:宿舍信息整体浏览
void displayStudents() {
if (numStudents == 0) {
printf("暂无学生住宿信息!\n");
return;
}
printf("\n--- 宿舍信息整体浏览 ---\n");
printf("楼号\t楼层\t房间号\t姓名\t\t入住年限\n");
for (int i = 0; i < numStudents; i++) {
printf("%d\t%d\t%d\t%s\t\t%d\n", students[i].building, students[i].floor, students[i].room, students[i].name, students[i].duration);
}
}
// 功能函数:根据楼号显示学生人数
void displayStudentCountByBuilding() {
int building;
int count = 0;
printf("\n--- 根据楼号显示学生人数 ---\n");
printf("请输入楼号: ");
scanf("%d", &building);
for (int i = 0; i < numStudents; i++) {
if (students[i].building == building) {
count++;
}
}
printf("楼号 %d 的学生人数为: %d\n", building, count);
}
// 功能函数:统计收费总额
void calculateTotalFee() {
int totalFee = numStudents * 1200;
printf("\n--- 统计收费总额 ---\n");
printf("学生总数:%d\n", numStudents);
printf("收费总额:%d\n", totalFee);
}
// 功能函数:修改学生姓名
void updateStudentName() {
int room;
char newName[50];
printf("\n--- 修改学生姓名 ---\n");
printf("请输入房间号: ");
scanf("%d", &room);
for (int i = 0; i < numStudents; i++) {
if (students[i].room == room) {
printf("请输入新的姓名: ");
scanf("%s", newName);
strcpy(students[i].name, newName);
printf("学生姓名已修改!\n");
return;
}
}
printf("未找到房间号为 %d 的学生信息!\n", room);
}
// 功能函数:按姓名排序
void sortByName() {
Student temp;
printf("\n--- 按姓名排序 ---\n");
for (int i = 0; i < numStudents - 1; i++) {
for (int j = 0; j < numStudents - i - 1; j++) {
if (strcmp(students[j].name, students[j + 1].name) > 0) {
temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
printf("学生信息已按姓名排序!\n");
}
// 功能函数:根据姓名删除学生信息
void deleteStudentByName() {
char name[50];
int found = 0;
printf("\n--- 根据姓名删除学生信息 ---\n");
printf("请输入姓名: ");
scanf("%s", name);
for (int i = 0; i < numStudents; i++) {
if (strcmp(students[i].name, name) == 0) {
// 将后面的学生信息向前移动
for (int j = i; j < numStudents - 1; j++) {
students[j] = students[j + 1];
}
found = 1;
numStudents--;
break;
}
}
if (found) {
printf("学生信息已删除成功!\n");
} else {
printf("未找到姓名为 %s 的学生信息!\n", name);
}
}
int main() {
int choice;
do {
displayMenu();
scanf("%d", &choice);
switch (choice) {
case 1:
addStudent();
break;
case 2:
displayStudents();
break;
case 3:
displayStudentCountByBuilding();
break;
case 4:
calculateTotalFee();
break;
case 5:
updateStudentName();
break;
case 6:
sortByName();
break;
case 7:
deleteStudentByName();
break;
case 8:
printf("退出程序。\n");
break;
default:
printf("无效的选择,请重新输入。\n");
break;
}
} while (choice != 8);
return 0;
}
运行截图
© 版权声明
本站资源来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!
THE END