1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 宿舍管理人员使用的宿舍管理软件——C代码

宿舍管理人员使用的宿舍管理软件——C代码

时间:2023-06-11 00:19:27

相关推荐

宿舍管理人员使用的宿舍管理软件——C代码

【问题描述】为宿舍管理人员编写一个宿舍管理软件, 查询学生宿舍住宿信息,开学时录入学生住宿信息,毕业时删除学生住宿信息。

【基本要求】

(1)建立数据文件,数据文件按关键字(姓名、学号、房号)进行排序(冒泡、选择、插入排序等任选一种);

(2)实现如下查询功能:

按姓名查询

按学号查询

按房号查询

打印任意查询结果(可以连续操作)

(3)录入、删除学生住宿信息,同时,将数据文本的信息及时更新。

代码解析:

数据文件电脑存在,且已经有若干名学生信息

要求1的实现:程序中采用关键字 ‘学号’ 以冒泡方式进行排序!程序流程:先读取数据文件,然后按照关键字‘学号’以冒泡顺序排序,再写入到数据文件中!

要求2的实现:均已经实现

要求3的实现:均已经实现

#include<stdio.h>#include<stdlib.h>#include<string.h>#include <conio.h>#define N 20typedef struct {char stuID[N]; //学号char name[N]; //姓名char roomID[N]; //房号}StuType;typedef struct {StuType S[N];int stunum; //学生人数}Student;///子函数的声明/void menu(); //索引菜单void Allprint(Student ); //打印学生信息到屏幕void stuID_Sort(Student *); //学号排序:由小到大排序 冒泡排序void name_Sort(Student *); //姓名排序:由小到大排序 冒泡排序void Read(Student *); //将文本中的数据读取到结构体数组中void Write(Student *); //将学生数据存储到数据文件中void roomIDsort(Student *); //根据房号,进行冒泡排序void NameSearch(Student *Stu); //输入学生名字,输出对应的学生信息void stuIDSearch(Student *Stu); //输入学生学号,输出对应的学生信息void HouseSearch(Student *Stu); //输入学生房号:输出对应的学生信息void AddStu(Student *PStu); //增加学生信息,按照学号进行排序,然后添加到数据文件中void DeleteStu(Student *PStu); //通过学号删除学生信息,按照学号进行排序,然后添加到数据文件中//通过输入学号,改变学生信息;按照学号进行排序,然后添加到数据文件中void ChangeStu(Student *PStu);//主函数:int main() {Student Stu;Read(&Stu); //将文件中的数据读取到结构体数组中stuID_Sort(&Stu); //将学生数据按照学号进行冒泡排序Write(&Stu); //将排序好的学生信息输入到数据文件中menu(); //菜单索引while (1){char input;if (kbhit()){input = getch();if (input == '1'){stuIDSearch(&Stu);}if (input == '2'){NameSearch(&Stu);}if (input == '3'){HouseSearch(&Stu);}if (input == '4'){stuID_Sort(&Stu);Allprint(Stu);}if (input == '5'){name_Sort(&Stu);Allprint(Stu);}if (input == '6'){roomIDsort(&Stu);Allprint(Stu);}if (input == '7'){AddStu(&Stu);}if (input == '8'){DeleteStu(&Stu);}if (input == '9'){ChangeStu(&Stu);}if (input == 'e'){printf("感谢您的使用!");system("cls");break;}}}return 0;}// 子函数的定义//索引菜单void menu() {printf("***************学生信息管理系统***************\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("9、修改信息\n");printf("e、退出 \n");printf("**********************************************\n");printf("请选择... \n ");}//打印学生信息到屏幕void Allprint(Student Stu) {printf("学号\t姓名\t房号\n");for (int i = 0; i < Stu.stunum; i++){printf("%s\t%s\t%s\n", Stu.S[i].stuID, Stu.S[i].name, Stu.S[i].roomID);}}//学号排序:由小到大排序 冒泡排序void stuID_Sort(Student *PStu) {int len = PStu->stunum;int i, j;StuType temp;for (i = 0; i < len - 1; i++)for (j = 0; j < len - 1 - i; j++)if (strcmp(PStu->S[j].stuID, PStu->S[j + 1].stuID) > 0) {temp = (PStu->S[j]);(PStu->S[j]) = (PStu->S[j+1]);(PStu->S[j+1]) = temp;}}//姓名排序:由小到大排序 冒泡排序void name_Sort(Student *PStu) {int len = PStu->stunum;int i, j;StuType temp;for (i = 0; i < len - 1; i++)for (j = 0; j < len - 1 - i; j++)if (strcmp(PStu->S[j].name, PStu->S[j + 1].name) > 0) {temp = (PStu->S[j]);(PStu->S[j]) = (PStu->S[j + 1]);(PStu->S[j + 1]) = temp;}}//将文本中的数据读取到结构体数组中void Read(Student *PStu) {FILE *fp = fopen("./Data Structure.txt", "r");int i = 0;if (fp == NULL) {printf("can not open the file");exit(0);}while (1){int n = fscanf(fp, "%s %s %s\n", PStu->S[i].stuID, PStu->S[i].name, PStu->S[i].roomID);if (n == -1) {break;}PStu->stunum = i + 1;i++;}fclose(fp);}//将学生数据存储到数据文件中void Write(Student *PStu) {FILE *fp = fopen("./Data Structure.txt", "w");int i = 0;if (fp == NULL) {printf("can not open the file");exit(1);}for (i = 0; i < PStu->stunum;i++) {fprintf(fp,"%s\t%s\t%s\n", PStu->S[i].stuID, PStu->S[i].name, PStu->S[i].roomID);}fclose(fp);}//根据房号,进行冒泡排序void roomIDsort(Student *PStu) {int len = PStu->stunum;int i, j;StuType temp;for (i = 0; i < len - 1; i++)for (j = 0; j < len - 1 - i; j++)if (strcmp(PStu->S[j].roomID, PStu->S[j + 1].roomID) > 0) {temp = (PStu->S[j]);(PStu->S[j]) = (PStu->S[j + 1]);(PStu->S[j + 1]) = temp;}}//输入学生名字,输出对应的学生信息void NameSearch(Student *Stu) {printf("请输入该学生的姓名:\n");char key[N];scanf("%s", key);int i;int flag = 0;for (i=0;i< Stu->stunum;i++)if (strcmp(Stu->S[i].name, key) == 0){flag = 1;break;}if (flag == 0){printf("查无此人!");return;}printf("查询成功!\t");printf("学号:%s,姓名:%s,房号:%s\n", Stu->S[i].stuID, Stu->S[i].name, Stu->S[i].roomID);}//输入学生学号,输出对应的学生信息void stuIDSearch(Student *Stu) {printf("请输入该学生的学号:\n");char key[N];scanf("%s", key);int nn = 0;int low, high, mid;low = 1;high = Stu->stunum;while (low <= high){mid = (high + low) / 2;if (strcmp(key, Stu->S[mid].stuID) == 0){nn = mid;break;}else if (strcmp(key, Stu->S[mid].stuID) < 0)high = mid - 1;elselow = mid + 1;}printf("查询成功!");printf("学号:%s,姓名:%s,房号:%s\n", Stu->S[nn].stuID, Stu->S[nn].name, Stu->S[nn].roomID);}//输入学生房号:输出对应的学生信息void HouseSearch(Student *Stu) {printf("请输入该学生的房号:\n");char key[N];scanf("%s", key);int i;int flag = 0;for (i = 0; i < Stu->stunum; i++)if (strcmp(Stu->S[i].roomID, key) == 0){flag = 1;break;}if (flag == 0){printf("查无此人!");return;}printf("查询成功!\t");printf("学号:%s,姓名:%s,房号:%s\n", Stu->S[i].stuID, Stu->S[i].name, Stu->S[i].roomID);}//增加学生信息,按照学号进行排序,然后添加到数据文件中void AddStu(Student *PStu) {printf("请依次输入该学生的学号、姓名、房号:\n");char num[N];char name[N];char house[N];scanf("%s %s %s", &num, &name, &house);strcpy(PStu->S[PStu->stunum].stuID, num);strcpy(PStu->S[PStu->stunum].name, name);strcpy(PStu->S[PStu->stunum].roomID, house);PStu->stunum++;stuID_Sort(PStu);Write(PStu);printf("添加成功!\n");}//通过学号删除学生信息,按照学号进行排序,然后添加到数据文件中void DeleteStu(Student *PStu) {printf("请输入该学生的学号:\n");char key[N];scanf("%s", &key);int i;int flag = 0;for (i=0;i< PStu->stunum;i++)if (strcmp(PStu->S[i].stuID,key) == 0){flag = 1;break;}if (flag == 0){printf("查无此人!");return;}printf("学号:%s,姓名:%s,房号:%s\n", PStu->S[i].stuID, PStu->S[i].name, PStu->S[i].roomID);printf("确定删除请按1,放弃删除请按0...\n");int q,k;scanf("%d", &q);if (q == 0) {return;}else{if (i == (PStu->stunum - 1)) {//删除最后一个学生信息}else{for (k = i; k < PStu->stunum - 1; k++) {PStu->S[k] = PStu->S[k + 1];}}PStu->stunum--;stuID_Sort(PStu);Write(PStu);printf("删除成功!\n");}}//通过输入学号,改变学生信息;按照学号进行排序,然后添加到数据文件中void ChangeStu(Student *PStu) {printf("请输入该学生的学号:\n");char key[N];scanf("%s", &key);int i;int flag = 0;for (i=0;i< PStu->stunum;i++)if (strcmp(PStu->S[i].stuID, key) == 0){flag = 1;break;}if (flag == 0){printf("查无此人!");return ;}printf("请依次输入修改后的学号\t姓名\t房号:\n");scanf("%s %s %s",PStu->S[i].stuID,PStu->S[i].name,PStu->S[i].roomID);stuID_Sort(PStu);Write(PStu);printf("修改成功!\n");}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。