您的位置:首页 > 编程语言 > C语言/C++

宿舍管理系统【C语言建工程及多文件练习】

2018-01-08 22:06 393 查看

系统功能:

  该宿舍管理系统能实现对学生信息的查询(包括按姓名、学号、班级、宿舍号)、对学生信息的修改、调换寝室/增加新寝室。在细节方面可以防止因错误输入导致的程序崩掉,当操作错误次数达到一定数量时,会结束本次操作。其他细节可以通过程序运行来体验。

学习体会:

  这次写的是宿舍管理系统,主要是想学一下C语言的多文件操作和工程的建立。

  在代码实现方面没有什么问题,主要是第一次用工程来写程序,有好多关于多文件操作的问题不会,在最后调试的时候找了一些资料去解决多文件的问题。

  在调试的时候虽然大致知道多文件应该怎样去调用源文件,但是还是出现了源文件被重复调用的问题,查了资料才知道源文件是不能被重复调用的。

  而条件编译可以用来保护头文件。在大多数程序中,一个程序可以由多个源文件和多个头文件组成。其中源文件包含函数的定义和函数的调用,头文件包含类型定义、函数原型声明等可以在源文件之间共享的信息。因为头文件自身也可以包含头文件,随着程序的增大,是用的头文件可能越来越多,文件的嵌套包含可能导致无意间包含同一个头文件多次,如果该头文件中包含类型定义,将造成编译错误。为了防止头文件多次包含,可以用#ifndef和#endif指令来封闭文件的内容。例如,可以用如下方式保护文件DS.h。

  

#ifndef DS_H//宏的名可以自己定义

#define DS_H

代码段

#endif


  在首次包含这个文件时,没有定义宏DS_ H,所以预处理器允许保留#ifndef和#endif之间的多行内容。但是如果该文件再次被包含,只是宏DS_H已经被定义过了,预处理器将把#ifndef和#endif之间的多行内容删除。

  在写程序的过程中还遇到了结构体全局变量的问题。最开始我把全局变量的申明和定义都放在了一个头文件中,然后在每个源文件中都调用了这个头文件,导致变量被重复定义。后来将全局变量的申明放到了主函数上,在其他每个源文件都用extern +变量类型+名称引用了一下就好了。

  总结了一些多文件的操作的一些问题:http://blog.csdn.net/k_young1997/article/details/79006537

  本来打算加一个账号登录功能的,但是因为时间比较紧所以就没有加。如果想要账号登录的代码的话上次写的简单图书管理系统中有这部分代码。http://blog.csdn.net/k_young1997/article/details/73480766

下面是宿舍管理系统主函数和各个头文件及源文件:

main函数:

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include"sai.h"
#include"find.h"
#include"prin.h"
#include"information.h"
#include"InformationExit.h"

using namespace std;

HEAD s;

int main()
{
int flag, shut = 1;
load();
while(shut){
if(shut == 1){
PrinMainMenu(0);
shut = 2;
}
else if(shut == 2) PrinMainMenu(1);
printf("\t\t\t\t");
if(!scanf("%d", &flag)){
Eat();
continue;
}
switch(flag)
{
case 1: Find(); break;
case 2: BIAN(); break;
case 3: FindEmptyBed(1); break;
case 4: shut = 0; break;
default: printf("\t\t\t输入错误,请正确输入!\n"); PrinTimeOut(); break;
}
}
return 0;
}


information.h头文件:

#ifndef INFORMATION_H
#define INFORMATION_H

extern void Add(dorm h);
extern void save(void);//保存宿舍信息
extern void load(void);//读取宿舍信息
extern void AddInformation(void);//创建新宿舍
extern void ExchangeBedroom(int r);//寝室安排

#endif


information.cpp源文件:

#include"prin.h"
#include"find.h"

extern HEAD s;

void Add(dorm h)
{
FILE *fp;
if((fp = fopen("123.txt", "a")) == NULL){
printf("\t\t\tFile open error!\n");
exit(0);
}
fprintf(fp, "%d\n", h->num);
for(int i = 1; i < 7; i++) fprintf(fp, "%d ", h->vis[i]);
fprintf(fp, "\n");
for(int i = 1; i < 7; i++){
if(!h->vis[i]) continue;
fprintf(fp, "%s\n%s\n%s\n%s\n", h->Infor[i].name, h->Infor[i].Cless, h->Infor[i].ID, h->Infor[i].sex);
}
if(fclose(fp)){
printf("\t\t\tCan not the close file!\n");
exit(0);
}
return ;
}

void save(void)//保存宿舍信息
{
FILE *fp;
if((fp = fopen("123.txt", "w")) == NULL){
printf("\t\t\tFile open error!\n");
exit(0);
}
dorm p = s->head->next;
while(p){
fprintf(fp, "%d\n", p->num);
for(int i = 1; i < 7; i++) fprintf(fp, "%d ", p->vis[i]);
fprintf(fp, "\n");
for(int i = 1; i < 7; i++){
if(!p->vis[i]) continue;
fprintf(fp, "%s\n%s\n%s\n%s\n", p->Infor[i].name, p->Infor[i].Cless, p->Infor[i].ID, p->Infor[i].sex);
}
p = p->next;
}
if(fclose(fp)){
printf("\t\t\tCan not the close file!\n");
exit(0);
}
return ;
}
void load(void)//读取宿舍信息
{
s = new H;
s->head = new Bedroom;
s->head->next = NULL;
s->head->num = 0;
dorm rear = s->head, q;
FILE *fp;
if((fp = fopen("123.txt", "r")) == NULL){
printf("\t\t\tFile open error!\n");
exit(0);
}
q = new Bedroom;
while(fscanf(fp, "%d", &q->num) != -1){
for(int i = 1; i < 7; i++) fscanf(fp, "%d", &q->vis[i]);
for(int i = 1; i < 7; i++){
if(!q->vis[i]) continue;
fscanf(fp, "%s%s%s%s", q->Infor[i].name, q->Infor[i].Cless, q->Infor[i].ID, q->Infor[i].sex);
}
q->prior = rear;
rear->next = q;
rear = q;
q = new Bedroom;
}
rear = NULL;
delete q;
if(fclose(fp)){
printf("\t\t\tCan not close the file!\n");
exit(0);
}
return ;
}

void AddInformation(void)//创建新宿舍
{
int n, k, ans = 0;
char ch, v[200];
dorm q, pre = s->head;
while(pre->next) pre = pre->next;
q = new Bedroom;
memset(q->vis, 0, sizeof(q->vis));
q->num = pre->num+1;
printf("\t\t\t您将住在%04d号寝室:\n\n");
printf("\t\t\t现在有1-6号床位是空床位,请选择床号:\n\t\t\t");
scanf("%d", &n);
q->vis
= 1;
printf("\t\t\t请输入学生姓名:\n\t\t\t");
scanf("%s", q->Infor
.name);
printf("\t\t\t请输入学生所在班级:\n\t\t\t");
scanf("%s", q->Infor
.Cless);
printf("\t\t\t请输入学生学号:\n\t\t\t");
scanf("%s", q->Infor
.ID);
printf("\t\t\t请输入学生性别:\n\t\t\t");
scanf("%s", q->Infor
.sex);
while(1){
ans++;
printf("是否确认入住(确定请按y,退出请按n)\n");
if((k = ScanCh(ans))) break;
printf("\t\t\t您将住在%04d号寝室:\n\n");
printf("\t\t\t现在有1-6号床位是空床位,请选择床号:\n\t\t\t");
printf("%d\n", n);
printf("\t\t\t请输入学生姓名:\n\t\t\t");
printf("%s\n", q->Infor
.name);
printf("\t\t\t请输入学生所在班级:\n\t\t\t");
printf("%s\n", q->Infor
.Cless);
printf("\t\t\t请输入学生学号:\n\t\t\t");
printf("%s\n", q->Infor
.ID);
printf("\t\t\t请输入学生性别:\n\t\t\t");
printf("%s\n", q->Infor
.sex);
}
if(-1 == k || 2 == k){
delete q;
return ;
}
q->prior = pre;
q->next = NULL;
pre->next = q;
Add(q);
return ;
}

void ExchangeBedroom(int r)//寝室安排
{
if(r == 3){
system("cls");
printf("\n\t\t\t\t操作错误达到三次,本次操作将不被保存!!\n");
PrinTimeOut();
return ;
}
dorm p;
int i, k, j = 0, flag = 0, ans = 0, a[100], t = 1, h, f;
while(1){
system("cls");
h = FindEmptyBed(0);
ans++;
printf("\t\t\t是否增加一个新的宿舍(是 请按y,否 请按n):\n\n");

19b73
if((k = ScanCh(ans))) break;
}
if(-1 == k) return ;
if(k == 1){
AddInformation();
return ;
}
if(h && 2 == k) return ;
printf("\t\t\t\t请输入要入住的寝室号:");
scanf("%d", &k); printf("\n");
p = FindByBedNum(k);
if(!p){
ExchangeBedroom(r+1);
return ;
}
memset(a, 0, sizeof(a));
for(i = 1; i < 7; i++) if(!p->vis[i]) a[i] = 1, j++;
if(j) printf("\t\t\t该寝室还有%d个空床位,分别是:\n\n", j);
else{
printf("\t\t\t%04d号寝室已没有空床位了,请从新选择寝室!!\n");
PrinTimeOut();system("cls");
ExchangeBedroom(r+1);
return ;
}

for(i = f = 1; i < 7; i++){
if(f && a[i]){
f = 0;
printf("\t\t\t%04d号床", i);
}
else if(!f && a[i])printf("、%04d号床", i);
}
printf("\n\n");
while(t < 4){
printf("\t\t\t请选择床号:");
f = scanf("%d", &k);
if(f && a[k]) break;
Eat();
printf("\n\t\t\t您还有 %d 次机会!!\n", 3-t);
t++;
}
if(4 == t){
ExchangeBedroom(r+1);
return ;
}
p->vis[k] = 1;
printf("\t\t\t请输入姓名:\n\t\t\t\t");
scanf("%s", p->Infor[k].name);
printf("\t\t\t请输入班级:\n\t\t\t\t");
scanf("%s", p->Infor[k].Cless);
printf("\t\t\t请输入学号:\n\t\t\t\t");
scanf("%s", p->Infor[k].ID);
printf("\t\t\t请输入性别:\n\t\t\t");
scanf("%s", p->Infor[k].sex);
printf("\n\n\t\t\t信息录入完毕!!\n");
PrinTimeOut();
system("cls");
printf("\t\t\t您将住在:");
PrinInfor(p, 1, k);
save();
PrinTimeOut();system("cls");
return ;
}


prin.h头文件:

#ifndef PRIN_H
#define PRIN_H

#include"sai.h"

extern void PrinTimeOut(void);//暂停
extern void PrinNotice(void);//数据库没有信息
extern void PrinMainMenu(int flag);//主菜单
extern void PrinFindMenu(void);//查询菜单
extern void PrintModifyMenu(void);//修改菜单
extern void PrinInfor(dorm p, int flag, int n);
extern void Eat(void);
extern int ScanCh(int ans);
extern void PrinExitFind(void);
extern void PrinExitMen(void);

#endif


prin.cpp源文件:

#include"prin.h"

extern HEAD s;

void PrinTimeOut(void)//暂停
{
printf("\t\t\t\t");
system("pause");
return ;
}

void PrinNotice(void)//数据库没有信息
{
printf("\t\t\t数据库中暂无任何信息,请录入学生信息!\n");
system("pause");
system("cls");
return ;
}

void PrinMainMenu(int flag)//主菜单
{
system("cls");
char h[2][30] = {"宿舍管理系统", "欢迎使用宿舍管理系统"};
printf("\t\t\t*******************************************\n");
printf("\t\t\t*                                         *\n");
if(flag) printf("\t\t\t*               %s              *\n", h[0]);
else printf("\t\t\t*           %s          *\n", h[1]);
printf("\t\t\t*                                         *\n");
printf("\t\t\t*         查询学生信息      请按 1        *\n");
printf("\t\t\t*                                         *\n");
printf("\t\t\t*         变更学生信息      请按 2        *\n");
printf("\t\t\t*                                         *\n");
printf("\t\t\t*         宿舍空床位情况    请按 3        *\n");
printf("\t\t\t*                                         *\n");
printf("\t\t\t*         退出系统          请按 4        *\n");
printf("\t\t\t*                                         *\n");
printf("\t\t\t*******************************************\n");
return ;
}

void PrinFindMenu(void)//查询菜单
{
system("cls");
printf("\t\t\t*******************************************\n");
printf("\t\t\t*                                         *\n");
printf("\t\t\t*              请选择操作选项             *\n");
printf("\t\t\t*                                         *\n");
printf("\t\t\t*           按姓名查询       请按 1       *\n");
printf("\t\t\t*                                         *\n");
printf("\t\t\t*           按学号查询       请按 2       *\n");
printf("\t\t\t*                                         *\n");
printf("\t\t\t*           按班级查询       请按 3       *\n");
printf("\t\t\t*                                         *\n");
printf("\t\t\t*           按宿舍号查询     请按 4       *\n");
printf("\t\t\t*                                         *\n");
printf("\t\t\t*           所有学生信息     请按 5       *\n");
printf("\t\t\t*                                         *\n");
printf("\t\t\t*           返回上一级菜单   请按 6       *\n");
printf("\t\t\t*                                         *\n");
printf("\t\t\t*******************************************\n");
return ;
}

void PrintModifyMenu(void)//修改菜单
{
system("cls");
printf("\t\t\t*******************************************\n");
printf("\t\t\t*                                         *\n");
printf("\t\t\t*              请选择操作选项             *\n");
printf("\t\t\t*                                         *\n");
printf("\t\t\t*       寝室安排             请按 1       *\n");
printf("\t\t\t*                                         *\n");
printf("\t\t\t*       修改学生信息         请按 2       *\n");
printf("\t\t\t*                                         *\n");
printf("\t\t\t*       删除学生信息         请按 3       *\n");
printf("\t\t\t*                                         *\n");
printf("\t\t\t*       返回上一级菜单       请按 4       *\n");
printf("\t\t\t*                                         *\n");
printf("\t\t\t*******************************************\n");
return ;
}

void PrinInfor(dorm p, int flag, int i)
{
if(flag) printf("\t\t\t%04d寝室:\n", p->num);
printf("\t\t\t\t%d号床:\n", i);
printf("\t\t\t\t姓名:%s\n\t\t\t\t班级:%s\n", p->Infor[i].name,p->Infor[i].Cless);
printf("\t\t\t\t学号:%s\n\t\t\t\t性别:%s\n\n", p->Infor[i].ID,p->Infor[i].sex);
return ;
}

void Eat(void)
{
char v[200];
printf("\t\t\t输入错误!!\n");
gets(v);
PrinTimeOut();
return ;
}

int ScanCh(int ans)
{
char v[200];
printf("\t\t\t\t");
scanf("%s", v);
if(v[0] == 'y'&& v[1] == '\0') return 1;
else if(v[0] == 'n' && v[1] == '\0') return 2;
if(ans >= 3){
printf("\t\t指令输入错误次数达到3次,本次操作将被取消!!\n");
PrinTimeOut();
system("cls");
return -1;
}
printf("\t\t输入指令有误,请正确输入指令,您还有 %d 次机会\n", 3-ans);
PrinTimeOut();
system("cls");
return 0;
}

void PrinExitFind(void)
{
system("cls");
printf("\t\t\t*******************************************\n");
printf("\t\t\t*                                         *\n");
printf("\t\t\t*              请选择操作选项             *\n");
printf("\t\t\t*                                         *\n");
printf("\t\t\t*        按姓名检索          请按 1       *\n");
printf("\t\t\t*                                         *\n");
printf("\t\t\t*        按学号检索          请按 2       *\n");
printf("\t\t\t*                                         *\n");
printf("\t\t\t*       返回上一级菜单       请按 3       *\n");
printf("\t\t\t*                                         *\n");
printf("\t\t\t*******************************************\n");
return ;
}

void PrinExitMen(void)
{
system("cls");
printf("\t\t\t*******************************************\n");
printf("\t\t\t*                                         *\n");
printf("\t\t\t*               请选择修改项              *\n");
printf("\t\t\t*                                         *\n");
printf("\t\t\t*        修改姓名            请按 1       *\n");
printf("\t\t\t*                                         *\n");
printf("\t\t\t*        修改班级            请按 2       *\n");
printf("\t\t\t*                                         *\n");
printf("\t\t\t*        修改学号            请按 3       *\n");
printf("\t\t\t*                                         *\n");
printf("\t\t\t*        修改性别            请按 4       *\n");
printf("\t\t\t*                                         *\n");
printf("\t\t\t*        返回上一级菜单      请按 5       *\n");
printf("\t\t\t*                                         *\n");
printf("\t\t\t*******************************************\n");
return ;
}


find.h头文件:

#ifndef FIND_H
#define FIND_H

#include"prin.h"

extern dorm FindByName(char *str);//按姓名查找
extern dorm FindByID(char *str);//按学号查找
extern void FindByCless(char *str);//按班级查找
extern dorm FindByBedNum(int n);//宿舍号查找
extern int FindEmptyBed(int n);//空床位查找
extern void FindAll(void);
extern void FindName(void);
extern void FindId(void);
extern void FindCless(void);
extern void FindBedNum(void);
extern void Find(void);

#endif


find.cpp源文件:

#include"find.h"
#include"sai.h"

extern HEAD s;

dorm FindByName(char *str)//按姓名查找
{
dorm p = NULL;
p = s->head->next;
if(!p){
PrinNotice();
return NULL;
}
while(p){
for(int i = 1; i < 7; i++)
if(p->vis[i] && !strcmp(p->Infor[i].name, str))
return p;
p = p->next;
}
printf("\t\t数据库中没有此人,请确保姓名输入正确或用其他信息进行检索!\n");
PrinTimeOut();
return NULL;
}

dorm FindByID(char *str)//按学号查找
{
dorm p = NULL;
p = s->head->next;
if(!p){
PrinNotice();
return NULL;
}
while(p){
for(int i = 1; i < 7; i++)
if(p->vis[i] && !strcmp(p->Infor[i].ID, str))
return p;
p = p->next;
}
printf("\t\t数据库中没有该学号,请确保学号输入正确或用其他信息进行检索!\n");
PrinTimeOut();
return NULL;
}

void FindByCless(char *str)//按班级查找
{
int i, flag, logo = 1;
dorm p = s->head->next;
if(!p){
PrinNotice();
return ;
}
printf("\t\t\t\t%s学生住宿情况:\n\n", str);
while(p){
for(i = flag = 1; i < 7; i++){
if(p->vis[i] && !strcmp(p->Infor[i].Cless, str)){
PrinInfor(p, flag, i);
flag = logo = 0;
}
}
p = p->next;
}
if(logo) printf("\t\t\t\t暂没有该班级学生信息!\n");
PrinTimeOut();
return ;
}

dorm FindByBedNum(int n)//宿舍号查找
{
dorm p = s->head->next;
if(!p){
PrinNotice();
return NULL;
}
while(p){
if(p->num == n) return p;
p = p->next;
}
printf("\t\t数据库中没有该寝室的信息!\n");
PrinTimeOut();
return NULL;
}

int FindEmptyBed(int f)//空床位查找
{
int i, flag, logo = 1;
dorm p = s->head->next;
if(!p) logo = -1;
while(p){
for(i = flag = 1; i < 7; i++){
if(!p->vis[i]){
if(logo){
printf("\t\t\t\t还剩余以下空床位:\n\n\n");
logo = 0;
}
if(flag){
printf("\t\t\t%04d寝室:\n\n\t\t\t", p->num);
flag = 0;
}
printf("%d号床  ", i);
}
}
if(!flag) printf("\n\n");
p = p->next;
}
if(logo == 1) printf("\t\t\t\t暂无空床位!!!\n\n");
else if(logo == -1) printf("\t\t\t\t数据库中暂无任何数据!!\n");
if(f) PrinTimeOut();
return logo;
}

void FindAll(void)
{
dorm q = s->head->next;
if(!q){
PrinNotice();
return ;
}
while(q){
for(int i = 1; i < 7; i++){
if(!q->vis[i]) continue;
if(i == 1) PrinInfor(q, 1, i);
else PrinInfor(q, 0, i);
}
q = q->next;
}
PrinTimeOut();
return ;
}

void FindName(void)
{
int i;
dorm q = s->head->next, p = NULL;
char str[100];
if(!q){
PrinNotice();
return;
}
printf("\t\t\t请输入需要查询的学生的姓名:\n\t\t\t");
scanf("%s", str);
p = FindByName(str);
if(!p) return ;
for(i = 1; i < 7; i++){
if(!p->vis[i]) continue;
if(0 == strcmp(str, p->Infor[i].name)) break;
}
PrinInfor(p, 1, i);
PrinTimeOut();
return ;
}

void FindId(void)
{
int i;
dorm q = s->head->next, p = NULL;
char str[100];
if(!q){
PrinNotice();
return ;
}
printf("\t\t\t请输入需要查询的学生的学号:\n\t\t\t");
scanf("%s", str);
p = FindByID(str);
if(!p) return ;
for(i = 1; i < 7; i++){
if(!p->vis[i]) continue;
if(0 == strcmp(str, p->Infor[i].ID)) break;
}
PrinInfor(p, 1, i);
PrinTimeOut();
return ;
}

void FindCless(void)
{
char str[100];
dorm p = s->head->next;
if(!p){
PrinNotice();
return ;
}
printf("\t\t\t请输入需要查询的班级:\n\t\t\t");
scanf("%s", str);
FindByCless(str);
return ;
}

void FindBedNum(void)
{
int n;
dorm h, p = s->head->next;
if(!p){
PrinNotice();
return ;
}
printf("\t\t\t请输入需要查找的寝室号:\n\t\t\t");
scanf("%d", &n);
h = FindByBedNum(n);
if(!h) return ;
for(int i = 1; i < 7; i++){
if(!h->vis[i]) continue;
printf("\t\t\t %d 号床:\n\t\t\t姓名:%s\n", i, h->Infor[i].name);
printf("\t\t\t班级:%s\n\t\t\t学号:%s\n", h->Infor[i].Cless, h->Infor[i].ID);
printf("\t\t\t性别:%s\n\n", h->Infor[i].sex);
}
PrinTimeOut();
return ;
}

void Find(void)
{
int flag;
while(1){
PrinFindMenu();
if(!scanf("%d", &flag)){
Eat();
continue;
}
switch(flag){
case 1: FindName(); break;
case 2: FindId(); break;
case 3: FindCless(); break;
case 4: FindBedNum(); break;
case 5: FindAll(); break;
case 6: return ;
default:  printf("\t\t\t输入错误,请正确输入!\n");system("pause");break;
}
}
}


Information.h头文件:

#ifndef INFORMATIONEXIT_H
#define INFORMATIONEXIT_H

extern void ExitName(dorm h, int i);
extern void ExitId(dorm h, int i);
extern void ExitCless(dorm h, int i);
extern void ExitSex(dorm h, int i);
extern bool Exit(dorm h, int i);
extern void ExitByName(void);
extern void ExitById(void);
extern void Retrieve(void);
void DelInformation(void);
void DelById(void);
void DelByName(void);
void BIAN(void);

#endif


Information.cpp源文件:

#include"sai.h"
#include"prin.h"
#include"find.h"
#include"information.h"

extern HEAD s;

void ExitName(dorm h, int i)
{
printf("\t\t\t请输入新的姓名:");
scanf("%s", h->Infor[i].name);
printf("\n\t\t\t\t修改成功!!\n");
system("pause");
return ;
}

void ExitId(dorm h, int i)
{
printf("\t\t\t请输入新的学号:");
scanf("%s", h->Infor[i].ID);
printf("\n\t\t\t\t修改成功!!\n");
system("pause");
return ;
}

void ExitCless(dorm h, int i)
{
printf("\t\t\t请输入新的班级:");
scanf("%s", h->Infor[i].Cless);
printf("\n\t\t\t\t修改成功!!\n");
system("pause");
return ;
}
void ExitSex(dorm h, int i)
{
printf("\t\t\t请输入性别:");
scanf("%s", h->Infor[i].sex);
printf("\n\t\t\t\t修改成功!!\n");
system("pause");
return ;
}

bool Exit(dorm h, int i)
{
int f = 0, flag;
while(1){
PrinExitMen();
if(!scanf("%d", &flag)){
Eat();
continue;
}
switch(flag){
case 1: ExitName(h, i); f = 1; break;
case 2: ExitCless(h, i);  f = 1; break;
case 3: ExitId(h, i);  f = 1; break;
case 4: ExitSex(h, i);  f = 1; break;
case 5: if(f) return true; else return false;
default: printf("\t\t\t输入错误,请正确输入!\n");system("pause");break;
}
}
}

void ExitByName(void)
{
int i;
char str[100];
printf("\t\t\t请输入需要修改信息的学生姓名:\n\t\t\t\t");
scanf("%s", str);
dorm h = FindByName(str);
if(!h) return ;
for(i = 1; i < 7; i++){
if(!h->vis[i]) continue;
if(strcmp(str, h->Infor[i].name) == 0) break;
}
system("cls");
PrinInfor(h, 1, i);
system("pause");
if(Exit(h, i)) save();
return ;
}

void ExitById(void)
{
int i;
char str[100];
printf("\t\t\t请输入需要修改的学生学号:\n\t\t\t\t");
scanf("%s", str);
dorm h = FindByID(str);
if(!h) return ;
for(i = 1; i < 7; i++){
if(!h->vis[i]) continue;
if(strcmp(str, h->Infor[i].ID) == 0) break;
}
system("cls");
PrinInfor(h, 1, i);
system("pause");
if(Exit(h, i)) save();
return ;
}

void Retrieve(void)
{
int flag;
while(1){
PrinExitFind();
if(!scanf("%d", &flag)){
Eat();
continue;
}
switch(flag){
case 1: ExitByName(); break;
case 2: ExitById(); break;
case 3: return ;
default: printf("\t\t\t输入错误,请正确输入!\n");system("pause");break;
}
}
}

void DelByName(void)
{
int i, ans = 0, k;
char str[100];
printf("\t\t\t请输入需要删除的学生的姓名:\n\t\t\t\t");
scanf("%s", str);
dorm h = FindByName(str);
if(!h) return ;
for(i = 1; i < 7; i++){
if(!h->vis[i]) continue;
if(strcmp(str, h->Infor[i].name) == 0) break;
}
system("cls");
while(1){
ans++;
PrinInfor(h, 1, i);
printf("\t\t\t是否删除该学生信息(是 请按 y 否 请按 n)\n\t\t\t");
if((k = ScanCh(ans))) break;
}
if(-1 == k) return ;
h->vis[i] = 0;
save();
printf("\t\t\t\t删除成功!!\n");
PrinTimeOut();
return ;
}
void DelById(void)
{
int i, ans = 0, k;
char str[100];
printf("\t\t\t请输入需要删除的学生的学号:\n\t\t\t\t");
scanf("%s", str);
dorm h = FindByID(str);
if(!h) return ;
for(i = 1; i < 7; i++){
if(!h->vis[i]) continue;
if(strcmp(str, h->Infor[i].ID) == 0) break;
}
system("cls");
while(1){
ans++;
PrinInfor(h, 1, i);
printf("\t\t\t是否删除该学生信息(是 请按 y 否 请按 n)\n");
if((k = ScanCh(ans))) break;
}
if(-1 == k) return ;
h->vis[i] = 0;
save();
printf("\t\t\t\t删除成功!!\n");
PrinTimeOut();
return ;
}

void DelInformation(void)
{
int flag;
while(1){
PrinExitFind();
if(!scanf("%d", &flag)){
Eat();
continue;
}
switch(flag){
case 1: DelByName(); break;
case 2: DelById(); break;
case 3: return ;
default: printf("\t\t\t输入错误,请正确输入!\n"); PrinTimeOut(); break;
}
}
}

void BIAN(void)
{
int flag;
while(1){
PrintModifyMenu();
if(!scanf("%d", &flag)){
Eat();
continue;
}
switch(flag){
case 1: ExchangeBedroom(0); break;
case 2: Retrieve(); break;
case 3: DelInformation(); break;
case 4: return ;
default : printf("\t\t\t输入错误,请正确输入!\n"); PrinTimeOut(); break;
}
}
}


sai.h头文件:

#ifndef SAI_H
#define SAI_H

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

typedef struct InforPren{
char name[100], Cless[100], ID[30], sex[10];
}InforPeople;

typedef struct Bedroom{
int num;
InforPeople Infor[7];
int vis[7];
struct Bedroom *next;
struct Bedroom *prior;
}*dorm;

typedef struct H{
dorm head;
}*HEAD;

#endif
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息