一个大三mm写的C语言实习题(高分工享),该怎么解决

一个大三mm写的C语言实习题(高分工享)
最近帮一个好朋友(mmA)的一个好朋友(mmB)辅导C;
mmB用了一天时间参考书根据需求写了如下程序,不由得想到了当年自己第一次学C的种种痛和乐!
这里把mmB写的Code列出   欢迎新手老手一起找找问题   共同回忆下当年当年成长的里程!

==========================================================================
房客管理系统
要求       系统包括新用户登记功能、统计功能、查询功能、修改功能
提示
建立如下结构体:
struct   Client
{
      char   Name[20];
      int   Sex;
      char   ID_card[20];//居民身份证;
      int   year;
      int   month;
      int     date;//住店时间
};

struct   Hotel
{
    int   Room_ID;//房间号
    int   Tel;
    int   Price:
    bool   Sing;//标记房间是否为空房间;
    struct   Client   Client_list;//实现两个结构体的嵌套
}Room[NUM];
===================================================================


------解决方案--------------------
如果真要找问题的话。

1。 冗长的代码没有一句注释

2。 inputs(prompt,s,count)
char *prompt;
char *s;
int count;
很多这种带指针的函数没有判断指针为空的情况,有风险。

3。 regi()中有malloc,但是一直没看到free,内存泄漏?

4。 函数名,变量名不够规范。

5。 struct Client中
char Name[20];
char ID_card[20];

在后面代码中存在数组越界可能,处理得不够友善。

6。 tuichu()
{
int c;
printf( "\t suggest you save the message,if save put 1 else put 2\n ");
scanf( "%d ",&c);
if(c==1) save();
if(c==2){
printf( "\t Thank you for useing the system!\n ");
exit(0);
}
}

c == 3的时候怎么办?

7。 ......代续
------解决方案--------------------
看到儒子可教也,我也点评一下吧。
大三的同学能写出这样的代码已经非常强了。不过看起来楼主的代码经验不多,C编译器可能还只会用TC,而且版本不会高于3.0。
个人以为,这个程序已经足够明白,不需要那么多的注释。《代码大全》说,优秀的程序应当是自注释的,不要打太多自然语言人家都能看明白他想做什么。

常量先预定义好,很好的风格!
#define NUM 500
C里没有class了,就用struct将就了^_^,这里的类型名和属性名描述性很强,一看就明白楼主要做酒店管理系统了。
struct Client
{
main()函数里的东西多了点,建议把显示菜单做成一个函数,并把do while语句和有输入的语句放出main()函数,增加可读性,以及以后维护时候方便。
start=0;
do
{
puts( "\t\t======================================================\n ");
puts( "\t\t========================MENU==========================\n ");
puts( "\t\t==== 1 registration ====\n ");
puts( "\t\t==== 2 statistic ====\n ");
puts( "\t\t==== 3 search ====\n ");
puts( "\t\t==== 4 modify ====\n ");
puts( "\t\t==== 5 tuichu ====\n ");
puts( "\t\t======================================================\n ");
puts( "\t\t======================================================\n ");
printf( "Choice your number(1-5):[]\b\b ");
scanf( "%d ",&n);
if(n <1||n> 5)
{
w=1;
getchar();
}
else w=0;
}
while(w==1);
switch(n)
{
case 1:regi();break;
case 2:stat();break;
case 3:search();break;
case 4:modify();break;
case 5:tuichu();
}
}
}
---这样定义函数的参数列表?明显是很老版本的C了,不是标准C的写法,不知道编译为什么没有给个警告?
inputs(prompt,s,count)
char *prompt;
char *s;
int count;