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#include#include#include#include#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 mon th;int date;int Room」D; char Tel[15];int Price;char Sig n[1O]; }Room[NUM];2. 功能实现设计:2.1总体设计:F面来分析一下整个系统,根据上面的要求分析,可将这个系统设计为五大模块(见下图):注册模块,统计模块,查询模块,修改模块,退出模块。
其主要功能为:注册,统计,查询,修改功能'客房管理、系统系统系注册统计查询修改退出2.2详细设计:程序中需要用到的函数2.2.1保存函数用于将输入的数据保存到文本文件客户信息.txt文件中,实现数据的保存void save()FILE *fp;int i;if ((fp=fope n(" 客户信息.txt","a+"))==NULL) /*a+表示以读和追加方式打开文件客户信息.txt */{pri ntf("ca nnot ope n file\n");return;}for(i=0;i
void read(){FILE *fp;int i;if((fp=fope n("客户信息.txt","r"))==NULL){pri ntf("\nCannot ope n file\n");return;}for(i=0;!feof(fp);i++) //!feof(fp) 文件读到结束时读取停止fsca nf(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].mo nth,&Room[i].date,&Room[i].Room」D,&Room[i].Tel,&Room[i].Price,&Room[i].Sig n,&now_ no);fclose(fp);}2.3 功能模块设计 2.3.1 注册模块 用于完成客户个人信息的输入功能并保存 本函数的功能为登记用户及房间 信息,包括姓名、性别、年龄、身份证、年份、月份、日期、房间及房间价 格系统依次分配房间号并定义此房间为非空void input(){int i=0,right,num;char as,sex[10];printf(" 顾客人数: ");seanf("%d人",&num); /输入顾客的人数do{printf("\t\t\t\t1. 录入宾客信息\n输入第%d宾客的信息\n",i+1);printf("\n 输入宾客姓名 :");gets(Room[i].name);do{printf("\n 输入宾客性别 :"); seanf("%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入住时间:%旳%4月%d0\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
系统根据输入的选项修改用户相应的信息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入住时间:%旳%4月%d0\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");}prin tf("\n");save();printf("\n 姓名:%s\n性别:%s\n年龄:%d\n身份证号:%s\n入住时间:%d 年%4月%d0\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].m on th,Room[i].date,Room[i].Room_ID,Room[i].Tel,Room[i].Price,Room[i].Sig n);break;}as=getch();}while(!as);system("cls");}2. 4主函数显示各功能选项+ N输入n判断n是否是0-5Y根据n的值调用各功能模块函数void main() {int as; start:doprintf("\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 主菜单= *MaJ"匚:' L 注「s\Adm i ni s-trator\D?5 Igo 丁肃谨文件凭\D ebjg i 音寿宜雯垂述.e:: yes3.3统计模块"C^UsersV^dmi 薩文件売\pebu g\咨搭旨琨至筑身檢证号; 人崔时间::倪明亮1472583&91472£03£92014年&月 20 口1祖1S93G?2S814yes竝却魏薦 卷軌I 年齡:12 彎: 矗I旬号礼 甬话号码: &哈:MB 疋杏人仔:2bHybbbHtbbS2274472014^6片胡 H1»42B478&9G524ves耿住艷臥 收入2181儿壁嵩縫返回二棗单-・LU3.4查询模块341按姓名查找i 'CflUsersVXdniini5trdtor\Deslaop\SFf^ 文件吴\Pebug\咅搭言埋杲航_啓审3〔第力土闾间间启 UiHiH入房房肩该噩肆讐嘲说I•那号煜回揺単 渝入要畫询的宾客世名:袁夫奇=91证号:259636*874S63214S5 玉■间吆叫年b月肚日 4^:106 ti£^lG98632ES4G gS:±30iH 是石人住 ijes址2145小 旳月5829 b 2 # £ UL 3 cI疇託住9 1 & 9 0 IV 培:2E::::15:12否 _■「1::一「L 汩■■ r昭□■ I- 滾呼:2名别曙、工间囘间尼 起家身入房层层4攻3.4.2按房间号查找是否继续査询虫“站¥:i 'C:MJser5>Adm i ntstr^tQr\Desktop\Sff^ 文件衰2 ebj g 倍妾言雯基紇亡鴉"W 雷 1---弐:1-/口 魁期;号问吸,眷走 弟序;1证£号4}^0^ 王间间Iffl启 堆隼身人房房倍该H9144b 6 0 s 12:2=1:2蠶臂障讪化名汉馳号皿回王菜卑 爲凡枣養询的房间号注葩3.5修改模块I 'C:',User5AAdmi nistr^giADe^ktop伸權乂 井天心 ebjg\S 靑百理至航^2“姓咎袁人奇萍知袁大奇0:曇 身咕证号: 忑崔m诃 房间号祗::躍时间青选笹:2気21口『间码码13恰 :逛善号:入 7|'|.龄吩王囘歩7n 皋身人房由晉疋2596369874S6321455 2014^G 月 日 10G1^986^25845jies2014年朗日19B 1S98632584Sves7.电运3.6退出=|叵|亠・「1.录.入宾客2 •统计宾宫息息息息亠5.・"UU注「亦Ad m i ni oratory Icq R祥谨丸*二云2弋b吗i音寿宜雯弄筑一 exh■ Jt WtKK JC 理 ><■!>< IKK 理 X KIR XK JtK 理 TtXIB JTK JT TT欢迎使用客房管理系统囲睪功能选环£cLdiy key tu eurnCiiTiLie3.7文本数据• • ••■ • Ui® v弼Jt(E 摇话(Ei格式0査香世 WftlE何明亮男21H7 258369 L4T 2583 63 2014 男 20 2509632599632^8145 2014 12 2BS9FFESES5B22ff447 2014 6 -19 11551EH&4123^54666 2014259636937456321455 2014 259636987456321^55 201420 3596:2588963545698 2C14 5 I 21 1472503&31472^369 2014 J 20 2ES9e32529632BSl^E 201d 12 25S9S&B85SS522n4br 201a 619 115515154123&54566 2014 21 25963698715&321^55 201421 259636937456321455 2014 20 3596:2580963545698 2014 65 20 101 15936925814 100 yes6 1^ 102 25696321445 120 yts 30 104 2E473595F2d 110 yes6 106 1578g^f>55E 200 吟6 21 106 1598632SB45 130 yes5 21 106 15336525845 130 yes 22 107 1E852363658 100 yes> 20 1Q1 1593B925814 100 yts6 誥 102 2B896321445 120 yes 20 M 2E47859&624 110 ye=5 lfl 1C5 15Z8B93&5&5 2Q0 yes5 21 106 1593532584S 130 y^s6 21 106 15986325845 130 yes22 107 1565236965B 100 yes4. 结束语通过此次实习,我们更加理解和懂得运用结构化程序设计的思想和方法, 初步掌握开发一个小型实用系统的基本方法,学会调试一个较长程序的的基本方 法,学会利用流程图表示算法,进一步掌握和提高利用 C语言进行程序设计的能力。
在实习中遇到了许多的调试不出结果出乎意料的问题 在调试的过程中, 得 到了许多以后可以避免错误的经验 也得到了很多没有接触过的知识 这些都使 我获益匪浅C 语言是一门计算机语言, 如同其他计算机语言甚至日常交际中常说的外语 一样需要不断的练习和实践才能逐渐掌握并熟练运用 尤其是对于带有创造性的 编写一个较大 C 语言程序时更能凸现出这一点由于本人学习该语言理论知识 时间仓促加之课下没有进行大量的程序编写练习, 因此在编写及调试本程序过程 中难免遇到了诸多问题现就出现的这些问题及解决办法作简要分析4.1. 设计思路起初对于本程序的思路都是一片空白, 对于题目中要求实现的用户登记、 统 计、查询、修改功能不知如何实现,重新对书中有关循环、数组、结构体、文件 等知识进行了回顾, 并且读了一些相关例题 本程序包含用户登记、 统计、查询、 修改等四大功能其中用户登记功能包含用户姓名、性别、年龄、身份证、入住 年份、入住月份、入住日期、房间号、房间及房间价格;统计功能包含按性 别统计、按年龄统计及按入住时间 (年月日) 统计;查询功能包含按房间号查询、 按姓名查询及按性别查询;修改功能包含性别修改、年龄修改、入住年份修改、 入住月份修改及入住日期修改。
按题目的要求, 编写能实现相应功能的函数, 最 后再从主函数中调用这些函数来4.2. 联系实际在上机调试过程中经常出现输入未给出的选项, 此时系统会发生各种难以预 料的结果,为避免此类情况的发生, 又反复对程序代码进行了修改, 以便系统能 对输入的各种选项进行正确处理4.3. 代码细节在程序编译时常常会出现各种或多或少的错误提示, 其原因往往是程序代码 出现了一些细节上的简单错误,或是分号缺失, 或是大括号不对应, 或是未定义 变量等各种常见错误 这些错误虽不是致命性的严重失误但却影响了程序的编译 和连接,最终仍不能使程序正常执行为了能够消除这些错误,必须不断地、反 复地修改程序代码,并且不断的调试运行4.4 改进虽然实习所要求的程序完成了,但是其中仍存在许多不足,比如对于数据的 输入正确与否判断的较少统计模块中, 统计的数据较少,只有按时间统计当天 的入住人数和收入,没有按月,按性别等其他条件统计的功能并且在房间的入 住方面,只考虑了单人间的情况,没有考虑多人间的可能因此程序还有很多地 方有待改进。