C 语言课程实习报告所在院系:_______班级学号:_____姓名:_________程序已存档:□是□否指导老师:__赵曼____评分:____________二零一四年七月目录1.题目与要求 (1)2.功能实现设计 (2)2.1总体设计 (2)2.2详细设计 (2)2.2.1保存函数 (2)2.2.2读取函数 (3)2.3 功能模块设计 (4)2.3.1 注册模块 (4)2.3.2 统计模块 (5)2.3.3查询模块 (7)2.3.4修改模块 (9)2.4主函数 (11)3.上机操作 (12)4.结束语 (16)实习课题:客房管理系统1.题目与要求:实现登记功能,要提供结构体的输入操作,实现统计功能,要提供相应的统计操作,实现查询功能,要提供查找操作,实现修改功能,要提供修改操作;另外还有提供键盘式菜单实现功能选择。
头文件:#include<time.h>#include<stdio.h>#include<conio.h>#include<stdlib.h>#include<string.h>#define NUM 50 //定义常量NUMvoid input();void record();void find();void modify();int now_no; //定义全局变量now_no建立如下结构体:struct Client{char name[20];char sex[10];int age;char ID_card[20];int year;int month;int date;int Room_ID;char Tel[15];int Price;char Sign[10];}Room[NUM];2.功能实现设计:2.1总体设计:下面来分析一下整个系统,根据上面的要求分析,可将这个系统设计为五大模块(见下图):注册模块,统计模块,查询模块,修改模块,退出模块。
其主要功能为:注册,统计,查询,修改功能。
2.2详细设计:程序中需要用到的函数。
2.2.1保存函数用于将输入的数据保存到文本文件客户信息.txt文件中,实现数据的保存void save(){FILE *fp;int i;if ((fp=fopen("客户信息.txt","a+"))==NULL) /*a+表示以读和追加方式打开文件客户信息.txt */{printf("cannot open file\n");return;}for(i=0;i<Room[i].age!=0;i++)fprintf(fp,"%s %s %d %s %d %d %d %d %s %d %s\n",Room[i].name,Room [i].sex,Room[i].age,Room[i].ID_card,Room[i].year,Room[i].month,Room[i ].date,Room[i].Room_ID,Room[i].Tel,Room[i].Price,Room[i].Sign);//按照规定的格式保存客户信息fclose(fp);}2.2.2读取函数将文本文件客户信息.txt中的客户个人信息读取出来,从而实现统计、查询以及修改的功能。
void read(){FILE *fp;int i;if((fp=fopen("客户信息.txt","r"))==NULL){printf("\nCannot open file\n");return;}for(i=0;!feof(fp);i++) //!feof(fp)文件读到结束时读取停止fscanf(fp,"%s %s %d %s %d %d %d %d %s %d %s\n",&Room[i].name,&Room[i].sex, &Room[i].age,&Room[i].ID_card,&Room[i].year,&Room[i].month,&Room[i]. date,&Room[i].Room_ID,&Room[i].Tel,&Room[i].Price,&Room[i].Sign,&now_ no);fclose(fp);}2.3 功能模块设计2.3.1 注册模块用于完成客户个人信息的输入功能并保存。
本函数的功能为登记用户及房间信息,包括姓名、性别、年龄、身份证、年份、月份、日期、房间电话及房间价格。
系统依次分配房间号并定义此房间为非空。
void input(){int i=0,right,num;char as,sex[10];printf("顾客人数:");scanf("%d人",&num); //输入顾客的人数do{printf("\t\t\t\t1.录入宾客信息\n输入第%d宾客的信息\n",i+1);printf("\n输入宾客姓名:");gets(Room[i].name);do{printf("\n输入宾客性别:");scanf("%s",&sex);if(strcmp(sex,"男")!=0&&strcmp(sex,"女")!=0) /*判断输入的字符是否为“男”或“女”,否则输出“输入有误!”*/{printf("输入有误!");right=1;getchar();}elseright=0;strcpy(Room[i].sex,sex);}while(right==1);printf("\n输入宾客的年龄:");scanf("%d",&Room[i].age);printf("\n输入宾客身份证号:");scanf("%s",&Room[i].ID_card);printf("\n输入宾客入住时间:");scanf("%d",&Room[i].year);scanf("%d",&Room[i].month);scanf("%d",&Room[i].date);printf("\n输入宾客房间号:");scanf("%d",&Room[i].Room_ID);printf("\n输入宾客房间电话:");scanf("%s",&Room[i].Tel);printf("\n输入宾客房间价格:");scanf("%d",&Room[i].Price);printf("\n输入该房间是否入住(yes/no):");scanf("%s",&Room[i].Sign); //输入客户的个人信息printf("\n\n");i++;now_no=i;printf("是否继续输入?(Y/N)"); //判断是否继续输入as=getch();system("cls");save();}while(as!='n'&&as!='N');system("cls"); //清屏}2.3.2 统计模块用于统计总共入住的人数,并且可以统计某一天住了多少人以及收入多少。
void record(){int i,j,y,m,d,s=0,money=0;char as;int n=0;read();do{printf("\n客房入住总数: ");fflush(stdin);for(j=0;Room[j].age!=0;j++)n=n+1;printf("%d间\n",n); //统计一共入住的人数printf("输入查询日期: "); //按照日期统计入住人数及收入scanf("%d%d%d",&y,&m,&d);fflush(stdin);for(i=0;i<=NUM;i++)if(((Room[i].year==y)&&(Room[i].month==m)&&(Room[i].date==d))) //判断输入的日期与数据库中的哪些日期相同{s=s+1;money=money+Room[i].Price;printf("\n 姓名:%s\n 性别:%s\n 年龄:%d\n 身份证号:%s\n 入住时间:%d年%d月%d日\n 房间号码:%d\n 电话号码:%s\n 价格:%d\n 是否入住:%s\n",Room[i].name,Room[i].sex,Room[i].age,Room[i].ID_card,Room[i ].year,Room[i].month,Room[i].date,Room[i].Room_ID,Room[i].Tel,Room[i] .Price,Room[i].Sign);}printf("\n该天客房入住总数: %d人\n",s);printf("该天共收入%d元\n",money);printf("\t按任意键返回主菜单.");as=getch();system("cls");}while(!as);system("cls");}2.3.3查询模块本函数的功能为输出查询功能菜单选项,包括根据房间号查询、根据姓名查询。
系统根据输入的选项执行相应的函数。
void find(){int i,a,b;char str[20],as;read ();do{printf("\n按以下条件查询:1.姓名 2.房间号 3.返回主菜单\n请选择:");scanf("%d",&a);switch(a){case 1:do{printf("输入要查询的宾客姓名:");fflush(stdin);gets(str);for(i=0;i<NUM;i++)if(!strcmp(Room[i].name,str))printf("\n 姓名:%s\n 性别:%s\n 年龄:%d\n 身份证号:%s\n 入住时间:%d 年%d月%d日\n 房间号码:%d\n 房间电话:%s\n 房间价格:%d\n 该房间是否入住(yes/no)%s\n\n",Room[i].name,Room[i].sex,Room[i].age,Room[i].ID_card,Room[i].year,Room[i].month,Room[i].date,Room[i].Room_ ID,Room[i].Tel,Room[i].Price,Room[i].Sign);else;}while(!as);break;case 2:do{printf("输入要查询的房间号:");scanf("%d",&b);for(i=0;i<NUM;i++)if(Room[i].Room_ID==b)printf("\n 姓名:%s\n 性别:%s\n 年龄:%d\n 身份证号:%s\n 入住时间:%d 年%d月%d日\n 房间号码:%d\n 房间电话:%s\n 房间价格:%d\n 该房间是否入住(yes/no)%s\n\n",Room[i].name,Room[i].sex,Room[i].age,Room[i].ID_card, Room[i].year,Room[i].month,Room[i].date,Room[i].Room_ID,Room[i].Tel,R oom[i].Price,Room[i].Sign);else;}while(!as);break;case 3:system("exit");default:break;}printf("是否继续查询?(Y/N)\n");as=getch();}while(as!='n'&&as!='N');system("cls");}2.3.4修改模块本函数的功能为系统根据输入的姓名调出该用户及所在房间信息,同时输出修改功能菜单选项,包括修改性别、修改年龄、修改入住年份、修改月份及修改日期等。