C语言课程设计与实验报告.docx
《C语言课程设计与实验报告.docx》由会员分享,可在线阅读,更多相关《C语言课程设计与实验报告.docx(88页珍藏版)》请在冰豆网上搜索。
C语言课程设计与实验报告
《C语言程序设计》课程设计实验报告
题目:
汽车租赁信息管理系统
专业:
计算机科学与技术
班级:
学号:
姓名:
成绩:
指导教师:
完成日期:
年月日
一、题目
汽车租赁信息管理系统
对某汽车租赁公司汽车租赁信息进行管理,包括汽车基本信息和汽车租赁信息。
(1)需要处理的基础数据
a)汽车租赁公司信息参考:
中文字段名
类型及长度
举例或说明
公司名称
char[30]
汽车类型
char
‘1’轿车‘2’客车‘3’货车
b)汽车基本信息参考:
中文字段名
类型及长度
举例或说明
汽车类型
char
‘1’轿车‘2’客车‘3’货车
公司名称
char[30]
汽车数
int
日租金
float
100.00
联系人
char[20]
“chenguoqing”
联系电话
char[20]
12345678901
c)汽车租赁信息参考:
中文字段名
类型及长度
举例或说明
客户姓名
char[20]
身份证号
char[20]
租车日期
char[12]
“2009/01/15”
租用天数
int
公司名称
char[30]
汽车类型
char
‘1’轿车‘2’客车‘3’货车
租车数目
int
3(辆)
(2)系统功能
a)各种基本数据的录入。
如:
汽车基本信息录入、租赁公司信息录入、汽车租赁信息录入。
b)各种基本数据的修改。
即:
允许对已经录入的数据重新进行编辑、修改。
c)各种基本数据的插入。
d)各种基本数据的删除。
e)基于各种数据的查询。
如:
某租赁公司在指定日期的租车信息。
f)基于各种基本数据的统计计算。
如:
(I)统计各汽车租赁公司总汽车数和租金总额,按租金总额从高到低排序后输出。
(II)统计某年度十二个月份汽车租赁的总次数和总租金。
(III)统计各公司各类汽车出租次数、出租金额,按出租金额从高到低排序后输出。
(IV)分别统计出租率最高的5家公司,从高到低排序后输出公司名称、公司汽车总数、出租总次数。
(V)汽车租赁信息其它方面的统计。
二、系统功能模块结构图
历史信息
三、数据结构设计及用法说明
这个系统是采用三个方向的十字链表,其中第一条链是汽车租赁公司的基本信息,包括公司名称、汽车类型和各类型汽车数量,第二条链是汽车基本信息,包括汽车类型、公司名称、汽车数、日租金、联系人和联系电话,第三条链是汽车租赁的基本信息,包括客户姓名、身份证号、租车日期、租车天数、公司名称、汽车类型和租车数目。
下图就是数据三个方向的十字交叉链表
四、程序结构
下图为程序结构的流程图:
是
五、各模块的功能
Build:
Load:
将已经存好的数据导入
New:
输入新的数据
Save:
将输入的数据保存
Quit:
退出程序
Search:
Firm:
查询公司信息
Bus:
查询汽车信息
Busrent查询汽车租赁信息
Modify:
Firm:
修改公司信息
Bus:
修改汽车信息
Busrent:
修改汽车租赁信息
Delete:
Firm:
删除公司信息
Bus:
删除汽车信息
Busrent:
删除汽车租赁信息
Insert:
Firm:
插入公司信息
Bus:
插入汽车信息
Busrent:
插入汽车租赁信息
Output:
Firm:
输出公司信息
Bus:
输出汽车信息
Busrent:
输出汽车租赁信息
Censue:
Tongji1:
统计每个公司的汽车总数和租赁的总收入
Tongji2:
统计每个年度所有公司出租汽车总数和总收入
Tongji3:
统计每个公司每种类型的汽车出租次数和收入
Tongji4:
统计每个公司汽车的出租率、总汽车数和租出汽车次数
Tongji5:
统计所有公司的所有年度汽车出租总数和总收入
六、试验结果
七、体会
这次实验结合了C语言里面的数组、指针、链表、文件等知识点。
刚开始的时候不知道如何下手,后来在相关书籍上找了相似的程序慢慢分析后开始自己尝试着写,因为开始的时候还是不会,就和寝室里面的人讨论、相互参考,经过几天的研究,我们终于写出了第一个界面,有了第一次的经验,我慢慢的写出了Build函数以及后面的函数。
最难的就是函数的调试了,开始运行的时候报错特别多,自己就那样一点一点的调,错误也渐渐减少,但是到最后又几个错误不管我怎么调就是报错,当时真的很着急,后来找到了班上成绩比较好的同学,纵欲把最后几个报错的地方改正了。
经过这么多的曲折,当我看到自己写出来的程序时心里有的是高兴与激动。
或许对于别人来说,这次的实验只是小菜一碟,但对我来说,这是经过我的付出与努力换来的。
八、参考文献
1.C语言程序设计曹计昌卢萍李开编著辞学出版社
2.TurboC使用大全第一册、第二册徐金梧等编译北京科海培训中心
3.C程序设计谭浩强清华大学出版
4.C语言程序设计廖雷高等教育出版社
九、程序清单
#include
#include
#include
#include
typedefstructbuscode
{
charbusnum[5];
chartype[2];
charfirm[30];
intrent;
charcontactor[20];
chartel[20];
structbuscode*next;
structbuscode*right;
}L;
typedefstructbus_rentcode
{
charbusnum[5];
charname[20];
charid_card_num[20];
charrent_date[12];
intrent_days;
charfirm_name[30];
intmount;
structbus_rentcode*next;
}H;
typedefstructfirmcode
{
charname[30];
intmount1;
intmount2;
intmount3;
structfirmcode*next;
structfirmcode*down;
}T;
char*Menu[]={"Build",
"Quit",
"Search",
"Modify",
"Delete",
"Insert",
"Output",
"Census"};
char*Prompt[]={"F1-Help",
"F5-Zoom",
"F6-Switch",
"F7-Trace",
"F8-Step",
"F9-Make",
"F10-Menu",
"NUM"};
char*Menus[]={"Load",
"New",
"Save",
"Areyousure?
",
"Firm",
"Bus",
"Busrent",
"Firm",
"Bus",
"Busrent",
"Firm",
"Bus",
"Busrent",
"Firm",
"Bus",
"Busrent",
"Firm",
"Bus",
"Busrent",
"tongji1",
"tongji2",
"tongji3",
"tongji4",
"tongji5"};
intMnN[]={3,1,3,3,3,3,3,5};
intMnLoc[][5]={{4,3,2,18,6},
{13,10,2,25,4},
{22,17,2,42,6},
{32,23,2,57,6},
{42,33,2,69,6},
{52,43,2,62,6},
{62,45,2,79,6},
{72,50,2,79,8}};
intMnm,Mns;
charbuf[30*25*2],buf1[40*3*2];
voidoutput_firm(T*head);
voidbuild(T**);
voidSave(T*head);
voidoutput_bus(T*head);
voidLoad(T**head);
voidoutput_busrent(T*head);
voidInsert_firm(T*head);
voidInsert_bus(T*head);
voidInsert_busrent(T*head);
voidDelete_firm(T*head);
voidDelete_bus(T*head);
voidDelete_busrent(T*head);
voidSearch_firm(T*head);
voidSearch_bus(T*head);
voidSearch_busrent(T*head);
voidModify_firm(T*head);
voidModify_bus(T*head);
voidModify_busrent(T*head);
voidtongji1(T*head);
voidtongji2(T*head);
voidtongji3(T*head);
voidtongji4(T*head);
voidtongji5(T*head);
voidShowMenuM(void);
voidSetMenuM(int);
voidClrMenuM(int);
voidShowMenuS(int);
voidHideMenuS(int);
voidSetMenuS(int);
voidClrMenuS(int);
voidSelLR(int);
voidSelUD(int);
voidExeItem(int,int);
voidScanKb(int*,int*);
T*hp=NULL;
L*t1;
H*t2;
voidmain(void)
{
inti,idx,key0,key1,flag=1;
textbackground(CYAN);
clrscr();
ShowMenuM();
Mnm=1;
Mns=0;
SetMenuM(Mnm);
while(flag){
key0=key1=0;
ScanKb(&key0,&key1);
if(key0!
=0){/*ifanordinarykeyispressed*/
if(Mns==0){/*operateonmainmenu*/
if(key0==13)
ShowMenuS(Mnm);
else{
for(i=0;i<8;i++)
if(key0-*Menu[i]==0||key0-*Menu[i]==32)
break;
if(i<8)
ShowMenuS(i+1);
}
}
else{/*operateonsubmenu*/
if(key0==13)
ExeItem(Mnm,Mns);
elseif(key0==27){
HideMenuS(Mnm);
Mns=0;
}
else{
for(i=1,idx=0;iidx+=MnN[i-1];
for(i=idx;iif(key0-*Menus[i]==0||key0-*Menus[i]==32)
break;
if(iExeItem(Mnm,i-idx+1);
}
}
}
else{/*ifaspecialkeyispressed*/
switch(key1){
case33:
ShowMenuS
(1);break;/*Alt+F*/
case18:
ShowMenuS
(2);break;/*Alt+E*/
case19:
ShowMenuS(3);break;/*Alt+R*/
case46:
ShowMenuS(4);break;/*Alt+C*/
case25:
ShowMenuS(5);break;/*Alt+P*/
case24:
ShowMenuS(6);break;/*Alt+O*/
case32:
ShowMenuS(7);break;/*Alt+D*/
case48:
ShowMenuS(8);break;/*Alt+B*/
case61:
ExeItem(1,1);break;/*F3*/
case106:
ExeItem(1,2);break;/*Alt+F3*/
case60:
ExeItem(1,4);break;/*F2*/
case45:
flag=0;break;/*Alt+X*/
case102:
ExeItem(3,1);break;/*Ctrl+F9*/
case95:
ExeItem(3,2);break;/*Ctrl+F2*/
case62:
ExeItem(3,3);break;/*F4*/
case65:
ExeItem(3,4);break;/*F7*/
case66:
ExeItem(3,5);break;/*F8*/
case108:
ExeItem(3,6);break;/*Alt+F5*/
case97:
ExeItem(7,1);break;/*Ctrl+F4*/
case96:
ExeItem(7,2);break;/*Ctrl+F3*/
case100:
ExeItem(8,1);break;/*Ctrl+F7*/
case101:
ExeItem(8,6);break;/*Ctrl+F8*/
case72:
SelUD(-1);break;/*UP*/
case80:
SelUD
(1);break;/*DOWN*/
case75:
SelLR(-1);break;/*LEFT*/
case77:
SelLR
(1);break;/*Right*/
}
}
}
}
voidShowMenuM(void)/*showmainmenu*/
{
inti;
window(1,1,80,1);
textbackground(GREEN);
textcolor(YELLOW);
clrscr();
for(i=0;i<8;i++){
gotoxy(MnLoc[i][0],1);
textcolor(RED);
cprintf("%c",*Menu[i]);
textcolor(BLACK);
cprintf("%s",Menu[i]+1);
}
}
voidSetMenuM(intmmn)/*tagmainmenu*/
{
window(1,1,80,1);
textbackground(GREEN);
textcolor(YELLOW);
gotoxy(MnLoc[mmn-1][0],1);
cprintf("%s",Menu[mmn-1]);
}
voidClrMenuM(intmmn)/*clearthetagofmainmenu*/
{
window(1,1,80,1);
textbackground(GREEN);
gotoxy(MnLoc[mmn-1][0],1);
textcolor(RED);
cprintf("%c",*Menu[mmn-1]);
textcolor(BLACK);
cprintf("%s",Menu[mmn-1]+1);
}
voidShowMenuS(intmmn)/*showsubmenuofmainmenummn*/
{
inti,left,top,right,bottom,ht,wd,idx;
if(mmn==Mnm&&Mns>0)
return;
if(mmn!
=Mnm){
if(Mns>0)HideMenuS(Mnm);
ClrMenuM(Mnm);
SetMenuM(Mnm=mmn);
}
Mns=1;
left=MnLoc[Mnm-1][1];
top=MnLoc[Mnm-1][2];
right=MnLoc[Mnm-1][3];
bottom=MnLoc[Mnm-1][4];
ht=bottom-top+1;
wd=right-left+1;
for(i=1,idx=0;iidx+=MnN[i-1];
gettext(left,top,right,bottom,buf);
window(left,top,right,bottom);
textbackground(LIGHTGRAY);
textcolor(BLACK);
clrscr();
window(left,top,right,bottom+1);
putch(0xda);
for(i=2;iputch(0xc4);
putch(0xbf);
for(i=2;igotoxy(1,i);
textcolor(BLACK);
cprintf("%c%-*s%c",0xb3,wd-3,Menus[idx+i-2],0xb3);
gotoxy(3,i);
textcolor(RED);
cprintf("%c",*Menus[idx+i-2]);
}
gotoxy(1,i);
textcolor(BLACK);
putch(0xc0);
for(i=2;i<=right-left;i++)
putch(0xc4);
putch(0xd9);
SetMenuS(Mns);
}
voidHideMenuS(intmmn)/*hidesubmenuofmainmenummn*/
{
intleft,top,right,bottom;
left=MnLoc[mmn-1][1];
top=MnLoc[mmn-1][2];
right=MnLoc[mmn-1][3];
bottom=MnLoc[mmn-1][4];
puttext(left,top,right,bottom,buf);
Mns=0;
}
voidSetMenuS(intsmn)/*tagsubmenu*/
{
inti,left,top,right,bottom,ht,wd,idx;
ClrMenuS(Mns);
Mns=smn;
left=MnLoc[Mnm-1][1];
top=MnLoc[Mnm-1][2];
right=MnLoc[Mnm-1][3];
bottom=MnLoc[Mnm-1][4];
wd=right-left+1;
for(i=1,idx=0;iidx+=MnN[i-1];
idx+=Mns-1;
window(left,top,right,bottom);
textbackground(BLACK);
textcolor(WHITE);
gotoxy(2,Mns+1);
cprintf("%-*s",wd-3,Menus[idx]);
}
voidClrMenuS(intsmn)/*clearthetagofsubmenu*/
{
inti,left,top,right,bottom,ht,wd,idx;
left=MnLoc[Mnm-1][1];
top=MnLoc[Mnm-1][2];
right=MnLoc[Mnm-1][3];
bottom=MnLoc[Mnm-1][4];
wd=right-left+1;
for(i=1,idx=0;iidx+=MnN[i-1];
idx+=smn-1;
window(left,top,right,bottom);
textbackground(WHITE);
textcolor(BLACK);
gotoxy(2,smn+1);
cprintf("%-*s",wd-3,Menus[idx]);
gotoxy(3,smn+1);
textcolor(RED);
cprintf("%c",*Menus[idx]);
}
voidSelLR(intlr)/*selectmenuitemleftorright*/
{
intmmn=Mnm+lr;
if(mmn>8)
mmn=1;
elseif(mmn<1)
mmn=8;
if(Mns>0)
ShowMenuS(mmn);
else{
ClrMenuM(Mnm);
SetMenuM(Mnm=mmn);
}
}
voidSelUD(intud)/*selectsubmenuitemupordown*/
{
intsmn=Mns+ud;
if(Mnm==2)
return;
if(smn>MnN[Mnm-1])
smn=1;
elseif(smn<1)
smn=MnN[Mnm-1];
if(Mns==0){
if(ud==1)ShowMenuS(Mnm);
}