资源描述
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 //定义常量NUM
void 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();}
else
right=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,Room[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修改模块
本函数的功能为系统根据输入的姓名调出该用户及所在房间信息,同时输出修改功能菜单选项,包括修改性别、修改年龄、修改入住年份、修改月份及修改日期等。系统根据输入的选项修改用户相应的信息。
void modify()
{
int i,x;
char str[20],as;
printf(”输入要修改的宾客姓名:");
scanf("%s”,&str);
read ();
do
{
for(i=0;Room[i]。age!=0;i++)
if(!strcmp(Room[i]。name,str))
{system(”cls”);
printf(”\n 姓名:%s\n 性别:%s\n 年龄:%d\n 身份证号:%s\n 入住时间:%d年%d月%d日\n 房间号码:%d\n 电话号码:%s\n 价格:%d\n 是否入住:%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);
printf("请选择要修改的内容:\n1.姓名 \t\t2。性别 \t\t3.年龄 \t\t4。身份证号 \n5。入住时间 \t6。房间号 \t7。客房电话 \t8。价格\n请选择:”);
//按照不同的选择修改相应的内容
scanf(”%d”,&x);
switch(x)
{
case 1:
printf("\n\t\t输入新插入宾客信息\n");
printf("\n输入宾客姓名:”);
scanf(”%s”,Room[i]。name);break;
case 2:
printf(”\n输入宾客性别:");
scanf(”%s",&Room[i].sex);break;
case 3:
printf("\n输入宾客的年龄:”);
scanf(”%d",&Room[i].age);break;
case 4:
printf(”\n输入宾客身份证号:”);
scanf(”%s",&Room[i]。ID_card);break;
case 5:
printf(”\n输入宾客入住时间:”);
scanf(”%d",&Room[i]。year);
scanf("%d”,&Room[i]。month);
scanf(”%d",&Room[i]。date);break;
case 6:
printf(”\n输入宾客房间号:”);
scanf("%d”,&Room[i]。Room_ID);break;
case 7:
printf("\n输入宾客房间电话:”);
scanf("%s",&Room[i]。Tel);break;
case 8:
printf(”\n输入宾客房间价格:”);
scanf(”%d",&Room[i]。Price);
case 9:system(”exit”);
default:system(”cls”);
}
printf(”\n");
save();
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);
break;
}as=getch();
}while(!as);
system(”cls”);
}
2.4主函数
显示各功能选项
根据 n的值调用各功能模块函数
N
Y
输入n ,判断n 是否是0-5
void main()
{
int as;
start:
do
{
printf(”\t***********************************”);
printf("\n\t\t欢迎使用客房管理系统\n");
printf("\n\t\t| 1。录入宾客信息 |\n\t\t| 2。统计宾客信息 |\n\t\t| 3。查询宾客信息 |\n\t\t| 4。修改宾客信息 |\n\t\t| 5。退出 |\n");
printf("\t***********************************\n”);
printf("\t\t选择功能选项: ”); //选择语句用于选择不同的模块
fflush(stdin);
scanf(”%d”,&as);
switch(as)
{case 1:system(”cls");input();break;
case 2:system("cls”);record();break;
case 3:system(”cls");find();break;
case 4:system(”cls”);modify();break;
case 5:system(”exit”);exit(0);
default:system(”cls”);goto start;}
}while(1);
}
3.上机操作
下面事各个模块的界面图:
3。1主菜单
3.2录入信息模块
3。3统计模块
3.4查询模块
3.4.1按姓名查找
3。4。2按房间号查找
3。5修改模块
3.6退出
3。7文本数据
4.结束语
通过此次实习,我们更加理解和懂得运用结构化程序设计的思想和方法,初步掌握开发一个小型实用系统的基本方法,学会调试一个较长程序的的基本方法,学会利用流程图表示算法,进一步掌握和提高利用C语言进行程序设计的能力.
在实习中遇到了许多的调试不出结果出乎意料的问题.在调试的过程中,得到了许多以后可以避免错误的经验。也得到了很多没有接触过的知识。这些都使我获益匪浅。
C语言是一门计算机语言,如同其他计算机语言甚至日常交际中常说的外语一样需要不断的练习和实践才能逐渐掌握并熟练运用.尤其是对于带有创造性的编写一个较大C语言程序时更能凸现出这一点.由于本人学习该语言理论知识时间仓促加之课下没有进行大量的程序编写练习,因此在编写及调试本程序过程中难免遇到了诸多问题。现就出现的这些问题及解决办法作简要分析。
4。1。设计思路
起初对于本程序的思路都是一片空白,对于题目中要求实现的用户登记、统计、查询、修改功能不知如何实现,重新对书中有关循环、数组、结构体、文件等知识进行了回顾,并且读了一些相关例题.本程序包含用户登记、统计、查询、修改等四大功能.其中用户登记功能包含用户姓名、性别、年龄、身份证、入住年份、入住月份、入住日期、房间号、房间电话及房间价格;统计功能包含按性别统计、按年龄统计及按入住时间(年月日)统计;查询功能包含按房间号查询、按姓名查询及按性别查询;修改功能包含性别修改、年龄修改、入住年份修改、入住月份修改及入住日期修改。按题目的要求,编写能实现相应功能的函数,最后再从主函数中调用这些函数来。
4。2。联系实际
在上机调试过程中经常出现输入未给出的选项,此时系统会发生各种难以预料的结果,为避免此类情况的发生,又反复对程序代码进行了修改,以便系统能对输入的各种选项进行正确处理。
4。3.代码细节
在程序编译时常常会出现各种或多或少的错误提示,其原因往往是程序代码出现了一些细节上的简单错误,或是分号缺失,或是大括号不对应,或是未定义变量等各种常见错误。这些错误虽不是致命性的严重失误但却影响了程序的编译和连接,最终仍不能使程序正常执行。为了能够消除这些错误,必须不断地、反复地修改程序代码,并且不断的调试运行。
4.4改进
虽然实习所要求的程序完成了,但是其中仍存在许多不足,比如对于数据的输入正确与否判断的较少。统计模块中,统计的数据较少,只有按时间统计当天的入住人数和收入,没有按月,按性别等其他条件统计的功能.并且在房间的入住方面,只考虑了单人间的情况,没有考虑多人间的可能.因此程序还有很多地方有待改进。
14
展开阅读全文