1、C语言专业课程设计报告客房标准管理系统 报告正文 一、题目要求 客户信息包括身份证号、姓名、性别、年龄、房间号。试设计一客房管理系统,使之能提供以下功能: (1) 系统以菜单方式工作 (2) 客户信息录入功能(客户信息用文件保存) (3) 客户信息统计功能 (4) 客户信息查询功能,查询方式 (5) 客户信息修改功能(可选项) [提示] 建立客户信息结构体,结构体成员包括身份证号、姓名、性别、年龄、房间号 二、需求分析 根据题目要求,要求对客户信息进行输入、输出等操作;在程序中需要浏览客户的信息,应提供显示、统计、查询、修改等操作;另外还应提供
2、键盘式选择菜单实现功能选择。 三、总体设计 根据需求分析,可以对这个系统的设计分为以下几个模块: 客户信息管理系统 数据输入 数据统计 数据查询 数据修改 数据删除 系统功能模块图 四、详细设计 1、主函数部分: 主函数一般设计得比较简洁,只提供输入,处理和输出部分的函数调用。其中各功能模块用菜单方式选择。 [流程图]: 显示各功能选项 根据 n的值调用各功能模块函数 N Y 输入n ,判断n 是否是0-5 主函数流程图 main() /**主函数**/ { printf("\n\
3、n\n\t\t~~~~~~~~~~~~~~~~酒店管理系统~~~~~~~~~~~~~~~~~"); printf("\n\n\n\t\t\tPress any key to continue....."); printf("\n\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t\t\t\t\t---By黄李\n"); getch(); menu(); } void regist() /**注册函数**/ { int n,m,i,j; printf("\tHow many new customs?\t");scanf("%d",&n);
4、printf("\tHow many rooms they want? ");scanf("%d",&m);
for(i=r;i 5、\tName:\t");scanf("%s",room[i].client_list[j].name);
puts("\n\tSex(1 for men || 0 for women):\t");scanf("%d",&room[i].client_list[j].sex);
puts("\n\tAge:\t");scanf("%d",&room[i].client_list[j].age);
puts("\n\tID_card:\t");scanf("%s",room[i].client_list[j].ID_card);
puts("\n\t 6、Year:\t");scanf("%d",&room[i].client_list[j].year);
puts("\n\tMonth:\t");scanf("%d",&room[i].client_list[j].month);
puts("\n\tDate:\t");scanf("%d",&room[i].client_list[j].date);
}
}
r=r+m;
p=p+n;
save();
menu();
}
void menu() /*****菜单函 7、数*****/
{int n,w;
do
{
puts("\n\n\n\t***************************MENU*****************************\n\n");
puts("\t\t\t ||(1).Regist ||\n");
puts("\t\t\t ||(2).Statistics||\n");
puts("\t\t\t ||(3).Search ||\n");
puts("\t\t\t ||(4).Modify ||\n");
puts("\t\t\t ||(5).Exit ||\n 8、");
puts("\n\t***********************************************************\n");
printf("\t\tPlease choice you number(1-5)");
scanf("%d",&n);
if(n<1||n>5) w=1,getchar();
else w=0;
}while(w==1);
switch(n)
{
case 1:regist();break;
case 2:stat();break;
case 3:search();break;
case 4:modify();b 9、reak;
case 5:exit(0);
}
}
注:menu函数能提供菜单方式选择功能,可以根据用户需要进入到所想要的操作模块中,此外把menu函数独立出来,可以方便随时对它进行调用,容易返回到系统界面。
并用结构体来存放客户信息:
struct client
{
char name[20];
int sex;
int age;
char ID_card[20]; /*居民身份证*/
int year;
int month;
int date; /*住店时间*/
};
str 10、uct hotel
{
int room_ID; /*房间号*/
char tel[15];
int price; /*住房单价*/
int sign;
struct client client_list[M]; /*实现两个结构体的嵌套*/
}room[N];
int r=0;p=0; /*r,p为全局变量*/
void menu();
void search_one();
void search_day();
void modify();
void modify_o 11、ne();
void load_room();
void modify_day();
void modify_s(int j,int i);
void save();
void search();
void stat_u();
void stat_o();
void regist();
void stat();
2、各功能模块函数部分:
(1)输入模块
[需求分析] 对信息进行输入。
[流程图]:
输入用户要输入客户记录的个数n
i从0到n-1调用输入函数input(i)
i!=0
保存调用函数save( n)
Y
输入模块流程图
程 12、序
void regist() /**注册函数**/
{
int n,m,i,j;
printf("\tHow many new customs?\t");scanf("%d",&n);
printf("\tHow many rooms they want? ");scanf("%d",&m);
for(i=r;i 13、
puts("\n\tPrice:\t");scanf("%d",&room[i].price);
room[i].sign=1;
}
for(j=p;j 14、");scanf("%d",&room[i].client_list[j].age);
puts("\n\tID_card:\t");scanf("%s",room[i].client_list[j].ID_card);
puts("\n\tYear:\t");scanf("%d",&room[i].client_list[j].year);
puts("\n\tMonth:\t");scanf("%d",&room[i].client_list[j].month);
puts("\n\tDate:\t");scanf("%d",&room[i] 15、client_list[j].date);
}
}
r=r+m;
p=p+n;
save();
menu();
}
(2)统计模块
[需求分析] 该模块的功能是显示所有客户记录信息。
显示客户记录(10个一屏)
:
按任意键显示下一屏
按任意键返回主菜单
统计模块流程图
程序
void stat() /***统计函数***/
{
int n,m;
do
{
puts("\t\t*********************MENU*** 16、\n");
puts("\t\t\t\t1).Statistics one month\n");
puts("\t\t\t\t2).Statistics using room\n");
puts("\t\t\t\t3).MENU()");
puts("\t\t**************************************************\n");
printf("\t\tPlease choice your number(1-3):[ ]\b\b");
scanf("%d",&n);
if(n<1&&n>3)
17、{m=1;
getchar();
}
else m=0;
}while(m==1);
switch(n)
{case 1:stat_o();break;
case 2:stat_u();break;
case 3:menu();
}
}
void stat_o() /*******统计人数******/
{
int j,i,n,l;
int s=0;
puts("Please input the month you want to statistics:");scanf("%d",&n);
load_room();
fo 18、r(i=0;i 19、d stat_u() /******统计使用中的房间*****/
{int j,l,s=0;
load_room();
for(j=0;j 20、2:stat();
}
}
printf_p(int i,int j) /******显示个人信息******/
{
printf("name:");puts(room[i].client_list[j].name);
printf("\nsex:%d\n",room[i].client_list[j].sex);
printf("\nage:%d\n",room[i].client_list[j].age);
puts("\nID_card:");printf("%s",room[i].client_list[j].ID_card);
21、printf("\nyear:%d\n",room[i].client_list[j].year);
printf("\nmonth:%d\n",room[i].client_list[j].month);
printf("\ndate:%d\n",room[i].client_list[j].date);
printf("\nRoom_ID:%d\n",room[i].room_ID);
printf("\nTel:%s\n",room[i].tel);
printf("\nPrice:%d\n",room[i].price);
}
(3)查找模块
是否找到客户记录
输 22、入一整型数值
提示没有找到
Y
N
查找模块
1,2,还是3
按身份证查找调用Search1()
按房间号查找,调用Search2()
searc
返回主菜单
3
2
1
查找模块流程图
程序:
void search() /********查找函数********/
{
int n,m;
do
{
puts("\n\n\t\t*********************MENU************************\n");
puts("\t\t1).Search some 23、one had erev lived here\n");
puts("\t\t2).Search someday \n");
puts("\t\t3).MENU()");
puts("\t\t************************************************\n");
printf("\t\tPlease choice your number(1-3):[ ]\b\b");
scanf("%d",&n);
if(n<1&&n>3)
{m=1;
getchar();
}
else m=0;
}while(m==1);
switc 24、h(n)
{case 1:search_one();break;
case 2:search_day();break;
case 3:menu();
}
}
void search_one() /*****查找个人*****/
{int i,j,w=0,l,m,n;
char s[20];
printf("Please input the name\n");
scanf("%s",s);
load_room();
for(i=0;i 25、name,s)==0) w=1,m=i,n=j;
if(w==1)
printf_p(m,n);
else printf("\nThere is no record here\n");
puts("What do you want to do?\n");
puts("1).search again\t2).back\n");
scanf("%d",&l);
switch(l)
{case 1:search_one();break;
case 2:search();
}
}
void search_day() /*******查询某日的使用 26、情况*******/
{
int i,j,l,m,n,a,b,c,w=0;
printf("\nPlease input the day you want to search");
printf("\nYear:"); scanf("%d",&a);
printf("\nMonth:"); scanf("%d",&b);
printf("\nDate:"); scanf("%d",&c);
load_room();
for(i=0;i 27、].client_list[j].month==b)&&(room[i].client_list[j].year==a)) w=1,m=i,n=j,printf_p(m,n);
if(w==0)
printf("NO record this day\n");
puts("What you want to do?\n");
puts("1).search again\t2).back\n");
scanf("%d",&l);
switch(l)
{case 1:search_day();break;
case 2:search();
}
}
(4)修改模块
28、
[需求分析] 该模块的功能是插入客户记录信息并且不能覆盖原有客户信息。
[流程图]
插入模块
调用加载函数
让用户输入要插入的客户信息个数
调用整条信息输入函数
用户作出选择,输入1or2
1还是2
2返回主菜单
1 浏览全部
修改模块流程图
程序:
void modify() /***** 修改函数 ******/
{
int n,m;
do
{
puts("\t\t*********************MENU***** 29、\n");
puts("\t\t\t\t1).modify one people\n");
puts("\t\t\t\t2).modify one day\n");
puts("\t\t\t\t3).MENU()");
puts("\t\t**************************************************\n");
printf("\t\tPlease choice your number(1-3):[ ]\b\b");
scanf("%d",&n);
if(n<1&&n>3)
{m=1;
get 30、char();
}
else m=0;
}while(m==1);
switch(n)
{case 1:modify_one();break;
case 2:modify_day();break;
case 3:menu();
}
}
void modify_one() /*****修改个人信息*****/
{
int i,j,m,n,w=0,l;
char s[20];
puts("\t\tPlease input the name");
scanf("%s",s);
load_room();
for(i=0;i 31、
for(j=0;j 32、odify_one();break;
case 2:modify();
}
}
void modify_s(int i,int j) /*********修改执行项*********/
{
int a,q;
char s[20],b[15];
printf("\nChoice the title you want to modify\n");
puts("1).Name 2).sex 3).age 4)ID_card 5).year 6).month 7).date 8).room_ID 9)tel 10).price\ 11).modi 33、fy none\n");
printf("Please choice your number(1-10):[ ]\b\b");
scanf("%d",&q);
switch(q)
{
case 1: printf("Please input new name\n");scanf("%s",s);
strcpy(room[i].client_list[j].name,s);break;
case 2: printf("Please input new sex\n");
scanf("%d",&a);room[i].client_list[j 34、].sex=a;break;
case 3: printf("Please input the new age\n");
scanf("%d",&a);room[i].client_list[j].age=a;break;
case 4: printf("Please input new ID_card\n");
scanf("%s",s);strcpy(room[i].client_list[j].ID_card,s);break;
case5: printf("Please input new year\n");
scan 35、f("%d",&a);room[i].client_list[j].year=a;break;
case6: printf("Please input the new month\n"); scanf("%d",&a);room[i].client_list[j].month=a;break;
case7: printf("Please input the new date\n");
scanf("%d",&a);room[i].client_list[j].date=a;break;
case8: printf("Please input t 36、he new room_ID\n");
scanf("%d",&a);room[i].room_ID=a;break;
case9: printf("Please input the new tel\n"); scanf("%s",b);strcpy(room[i].tel,b);break;
case 10: printf("Please input the new price\n");
scanf("%d",&a);room[i].price=a;break;
case 11 : modify();
}
}
void modify_day( 37、) /*******修改某日信息******/
{
int i,j,l,a,b,c,w=0,m,n;
puts("\t\tPlease input the date");
puts("\nYear:");scanf("%d",&a);
puts("\nMonth:");scanf("%d",&b);
puts("\nDate:");scanf("%d",&c);
load_room();
for(i=0;i 38、list[j].month==b)&&(room[i].client_list[j].year==a)) w=1,m=i,n=j;
if(w==1)
printf_p(m,n);
else printf("NO record this day\n");
modify_s(m,n);
save();
puts("What you want to do?\n");
puts("1).modify again\t2).back\n");
scanf("%d",&l);
switch(l)
{case 1:modify_day();break;
case 2:menu 39、);
}
}
3、公共函数部分:
(1)保存函数 save()
void save() /********保存函数********/
{
FILE*fp;
int i,j;
if((fp=fopen("","w"))==NULL)
{
printf("\nCannot open file\n");
return NULL;
}
for(i=0;i 40、room[i].price,room[i].sign,room[i].client_list[j].name,room[i].client_list[j].sex,room[i].client_list[j].age,room[i].client_list[j].ID_card,room[i].client_list[j].year,room[i].client_list[j].month,room[i].client_list[j].date);
fclose(fp);
return 1;
}
(2)加载函数 load_room()
[说明]:该函数可以用来加载所有记录,并且可以 41、返回所有记录的个数。
void load_room() /******加载函数******/
{
FILE *fp;
struct hotel room[N];
int i,j;
if((fp=fopen("","r"))==NULL)
{
printf("\nCannot open file\n");
return 0;
}
for(i=0;!feof(fp);i++)
for(j=0;!feof(fp);j++)
fscanf(fp,"%d,%s,%d,%d,%s,%d,%d,%s,%d, 42、d,%d",&room[i].room_ID,room[i].tel,&room[i].price,&room[i].sign,room[i].client_list[j].name,&room[i].client_list[j].sex,&room[i].client_list[j].age,room[i].client_list[j].ID_card,&room[i].client_list[j].year,&room[i].client_list[j].month,&room[i].client_list[j].date);
fclose(fp);
r=i;
p=j; 43、 }
(3)一个任务结束时的选择浏览还是返回的函数printf_back()
void printf_back()
{int k,w;
void browse();
printf("\n\n\tSuccessful^-^.\n\n");
printf("What do you want to do?\n\n\t1).Browse all now\t2).Back: [ ]\b\b");
scanf("%d",&w);
if(w==1)browse();
else menu();}
(4)修改整条数据记录函数modify_data(int i,int n)
voi 44、d printf_face();modify_data(int i,int n)
{int c,w1;
do
{puts("\nmodify by=>\n\n 1).number 2).name 3).cancel and back");
printf("Which you needed?:[ ]\b\b");
scanf("%d",&c);
if(c>3||c<1)
{puts("\nChoice error!please again!");getchar();}
}
while(c>3||c<1);
do
{switch(c)
{case 1:no_input(i, 45、n);break;
case 2:printf("name:");scanf("%s",staff[i].name);break;
case 3:menu();break;}
puts("\nNow:\n");
printf_one(i);
printf("\nAre you sure?\n\n\t1).sure 2).no and remodify 3).back without save in this time [ ]\b\b");
scanf("%d",&w1);
if(w1==1)save(n);
}
while(w1==2);
return(w1);
}






