一个大三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;
最近帮一个好朋友(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;