《数据结构与C语言综合训练》实习报告
题 目: 汽车租借公司的管理
| 学 号 | 2010012843 |
| 姓 名 | 陈金亚 |
| 专业班级 | 计算机科学与技术102班 |
| 指导教师 | 蔡骋 |
| 完成日期 | 2011年7月8日——7月17日 |
目 录
一、综合训练目的与要求 3
二、综合训练任务描述 3
三、算法设计 3
四、详细设计说明 12
五、调试与测试 13
六、实习日志 15
七、实习总结 15
八、附录:核心代码清单 15
一、综合训练目的与要求
本综合训练是软件工程专业重要的实践性环节之一,是在学生学习完《算法分析》课程后进行的综合练习。本课综合训练的目的和任务:
1. 巩固和加深学生对算法分析课程基本知识的理解和掌握;
2. 培养利用算法知识解决实际问题的能力;
3. 掌握利用程序设计语言进行算法程序的开发、调试、测试的能力;
4. 掌握书写算法设计说明文档的能力;
5. 提高综合运用算法、程序设计语言、数据结构知识的能力。
6. 应用线性数据结构存储信息,并能够应用上面的基本操作实现事务管理。
二、综合训练任务描述
设计数据结构及算法完成某个汽车租借公司日常工作的组织与管理。该管理系统的基本管理对象为汽车,每台汽车用一个license number进行唯一标识。每个汽车存在三种可能状态:
·可以租借(available for rent)
·已借(rented)
·修理中(in repair)
其中在available队列中汽车应该依据汽车行驶过的路程进行排序,行驶路程最少的汽车排在最前面。在rented队列中的汽车应依据其预期返回时间进行排序,排在最前的应是预期最早返回的汽车。
三、算法设计
(1) 文字描述
用三个链表组织三种状态的汽车, 能够实现租借的日常事务:引入新车,租借,收费,修理等。租借收费应根据汽车行驶的路程及借去的时间综合计算得出,路程收费标准如下:低于100Km收费20.00元, 100Km以外的路程枚Km收费0.15元, 汽车根据行驶的路程定期进行维护, 还需实现辅助操作:汽车查询,打印全部信息,计算并打印收入、成本及收益,, 主要集中在链表的基本操作上管理系统应有完整地界面(最好是图形化界面)
主要集中在链表的基本操作上,主要是链表的插入、删除、排序,文件导入导出。
(2) 框图
输入车辆信息
输入车辆信息
输入车辆信息
输入车辆信息
(3) 伪代码
struct carRecord// 汽车记录结构体
{
int Number;
char *Name;
int Journey;
char *Information;
int AvailableRent;
int RentedTime;
int RepairTime;
float Fee;
float Earn;
float Benifit;
int Lable;
TCHAR Way[256];
} ;// carRecord
struct carNode//节点结构体
{
carRecord Record;
carNode *Next;
carNode *Front;
};// carNode
struct Head//三个链表的结构体
{
carNode *Available;
int aN;
carNode *Rented;
int reN;
carNode *Repair;
int repN;
};// Head
void linkInsert(carNode *head, carNode *node)//链表头插入
{
node->Next = head->Next;
if(head->Next) head->Next->Front=node;
head->Next = node;
node->Front = head;}//if
}// linkInsert
int loadRecord(char *path,carNode *head ,int lable)//文件导入
{
FILE *file= fopen(path,"rt");
fscanf(file,"%d\\n",&num);
carNode **Cars;
for(i=0 ; i Cars[i]->Record.Name = (char *)malloc(NMAX); fscanf(file,"%d\\n",&Cars[i]->Record.Number); fgets(Cars[i]->Record.Name,NMAX,file); fscanf(file,"%d\\n",&Cars[i]->Record.Journey); fscanf(file,"%d\\n",&Cars[i]->Record.RentedTime); fscanf(file,"%d\\n",&Cars[i]->Record.RepairTime); fscanf(file,"%f\\n",&Cars[i]->Record.Fee); fscanf(file,"%f\\n",&Cars[i]->Record.Earn); fscanf(file,"%f\\n",&Cars[i]->Record.Benifit); Cars[i]->Record.Information = (char *)malloc(IMAX); fgets(Cars[i]->Record.Information,IMAX,file); Cars[i]->Record.Lable = lable++ ; itoa(Cars[i]->Record.Number, Cars[i]->Record.Way, 10); inkInsert(head,Cars[i]); } fclose(file); return num; }// loadRecord void putInFile(carNode* head, char *path,int n) //文件导出 { FILE *fp=fopen(path,"w"); p=head->Next; fprintf(fp,"%d\\n",n); while(p) { fprintf(fp,"%d\\n%s%d\\n%d\\n%d\\n%.2f\\n%.2f\\n%.2f\\n%s",p->Record.Number,p->Record.Name,p->Record.Journey,p->Record.RentedTime,p->Record.RepairTime,p->Record.Fee,p->Record.Earn,p->Record.Benifit,p->Record.Information); p=p->Next; } fclose(fp); } // putInFile int node1MoveTo2(carNode *head1, carNode *head2,int n)//节点转移 { p=head1->Next; while(p) { if(p->Record.Number==n) break; p=p->Next; } if(p==NULL) return 1; else if(p->Next==NULL) p->Front->Next = p->Next; else { p->Next->Front = p->Front; p->Front->Next = p->Next; } linkInsert(head2,p); return 0; }// node1MoveTo2 carNode* nodeSortAvailable(carNode *head,int n) //链表递增排序 { i=0; head1=(carNode*)malloc(sizeof(carNode)); u= head1->Next; while(i while(p) { p =p->Next; if(p!=NULL&&(q->Record.Journey q=p; } if(q->Next==NULL) q->Front->Next=q->Next; else if(q->Next) { q->Front->Next=q->Next; q->Next->Front =q->Front; } linkInsert(head1, q); ++i; p=head->Next; q=p; } q=head; while(q)//删除原链表 { u=q; q=q->Next; free(u); } head= head1;//新链表赋予head free(q); free(p); return head1; }// nodeSortAvailable carNode* nodeSortRented(carNode *head,int n);//类似nodeSortRented() carNode* nodeSortRepair(carNode *head,int n); //类似nodeSortRented() void rentCar(Head &head, int num,int rt);//利用node1MoveTo2()函数 void repairCar(Head &head, int num,int rpt) ;//利用node1MoveTo2()函数 void returnCar(Head &head, int num,int l,int t) ;//利用node1MoveTo2()函数 int returnRepairCar(Head &head, int num,float fee) ;//利用node1MoveTo2()函数 int addCar(carNode* head,char*path,char *strNum ,char *name,char *strJourney, char *infor) { node=(carNode*)malloc(sizeof(carNode)); initNode(node); node->Record.Name = (char *)malloc(NMAX); node->Record.Information = (char *)malloc(IMAX); number = atoi(strNum); journey = atoi(strJourney); node->Record.Number= number; node->Record.Name = name; node->Record.Journey = journey; node->Record.Information = infor; if(number ==0 ||name=="\\n" ||journey==0||infor =="\\n" ) return 1; node->Record.RentedTime=0; node->Record.RepairTime=0; node->Record.Fee=0; node->Record.Earn=0; node->Record.Number,node->Record.Name,node->Record.Journey,node->Record.RentedTime,node->Record.RepairTime,node->Record.Fee,node->Record.Earn,node->Record.Information); if(head->Next==NULL) { node->Next=head->Next; head->Next =node; node->Front = head; } else if(head->Next!=NULL) linkInsert(head,node); return 0; } //addCar float Charge(int num, int journey,int t, carNode *p) { charge=0; s= journey- p->Record.Journey; if(sum<=100) charge=20+t*500; else if(sum>100) charge=20+(sum-100)*0.15+t*500; p->Record.Journey=journey; return charge; }// Charge float Benifit(Head &head, float &fee, float &earn)//清算总收益 { p=head.Available->Next; if(p) { while(p) { earn =earn +p->Record.Earn; fee = fee+ p->Record.Fee; p=p->Next; } } p=head.Rented->Next; if(p) while(p) { earn =earn +p->Record.Earn; fee = fee+ p->Record.Fee; p=p->Next; } p=head.Repair->Next; if(p) { while(p) { earn =earn +p->Record.Earn; fee = fee+ p->Record.Fee; p=p->Next; } } ben = earn -fee; return ben; }// Benefit void findCar(Head head, int num) { n=0; p=head.Available->Next; while(p) { if(p->Record.Number==num) { n=num; return p; } p=p->Next; } p=head.Repair->Next; while(p)//同上 p=head.Rented->Next; while(p)//同上 if(n==0) return 0; }//findCar int delCar(Head &head,int num) { n=0; p=head.Available->Next; while(p) { if(p->Record.Number==num) { n=num; return 0; } p=p->Next; } if(n==0) return 1; p->Front->Next = p->Next; p->Next->Front =p->Front; head.aN--; free(p); return 0; }// delCar void destroyLink(Head &head)//摧毁数据 { p=head.Available; while(p) { u=p; p=p->Next; free(u); } p=head.Rented; while(p);//同上 p=head.Repair; while(p);//同上 free(p); } // destroyLink void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) { HWND hwndCombocars =GetDlgItem(hwnd,IDC_COMBOCARS); HWND hwndComboSearch =GetDlgItem(hwnd,IDC_COMBOSEARCH); switch(id) { case IDC_LOOKCAR: {} break; /*****************省略功能按钮***********************/ case IDC_RETURNCAR: {} break; case IDC_BENIFIT: {} break; case IDC_DELCAR: {} case ID_MENUVIEW: {} /*****************省略菜单按钮***********************/ case ID_MENUQUIT: EndDialog(hwnd, 0); break; default: break; } void Main_OnClose(HWND hwnd) { EndDialog(hwnd, 0); } (4) 复杂度分析(选作) 链表插入删除复杂度均为O(n); 链表排序为O(n^2) 四、详细设计说明 用三个链表组织三种状态的汽车, 将头节点设置成为结构体Head,三个链表分别为H.Available, H.Rented, H.Repair,是三个链表能够统一起来,链表的操作有初始化通过initCarNode()实现,链表的插入有函数linkInsert(),链表的排序通过插入排序,建立一个新的排序链表,然后将旧的未排序链表删除,将新链表赋予原来的表头,通过nodeSort()函数实现,由于三个链表的排序关键字不同,所以设计了nodeSortAvailable(), nodeSortRented (),nodeSortRepair()三个函数,对三个链表进行排序。 为了能是操作简单一些,我设计的是双向链表,那么删除是就可以直接删除,减少时间的消耗,删除节点的函数是delCar(),代码部分主要就是对双向链表的常规操作。 为了使导入数据方便,数据的导入方式为文件导入,三种状态的车辆信息分别放在CarsAvailable.txt,CarsRented.txt,CarsRepair.txt里面,打开程序后遍自动导入,导入同时进行排序。同时可以在这三个文件里经行修改管理。 图形界面为一个简单的对话框模式,初始化对话的为Main_OnInitDialog(),对命令经行响应的是Main_OnCommand()函数,将源代码与图形界面结合后,是程序更人性化,是操作更简单明了。 对于图片的展示,由于水平有限,使用windows自带的图片浏览器。 五、调试与测试 调试分为两个部分,第一部分是代码的测试,第二部分是图形界面与代码结合的测试。 六、实习日志 7月8日,进行选题和最后确认,对题目进行思考; 7月9日,编写链表部分代码,主要针对链表的插入、删除、排序等; 7月10日,加入功能函数,运用链表的操作,实现部分汽车租赁管理功能; 7月11日,对功能进行调试和优化,构思图形界面; 7月12日,通过网上的视频教程等自学VC++ 6.0,为图形界面设计做准备。同时继续对代码进行Debug; 7月13日,学习VC++ 6.0,编写小型图形界面熟悉MessageBox()等函数; 7月14日,学习VC++ 6.0,跟随视频教程学习,运用ComboBox宏编写小程序; 7月15日,设计图形界面,尝试代码和图形的结合; 7月16日,在代码和图形结合时,对代码不完善的地方,和不适用图形的部分进行修改和删减,并可以通过图形进行操作,增加了通过车牌和车名进行查找; 7月17日,完善图形界面和代码,撰写实习报告。 七、实习总结 本次实习总共历时10天,培养学生的动手操作能力和创新能力。我在实习中遇到不少问题,其中不乏很多简单的但是被我忽略的错误,导致一个错误很长时间无法解决,却是因为一个初始化问题。同时由于编译器不同,对代码的严谨程度也不同,Codeblocks对许多错误能够容忍不报错,而VC++ 6.0就不同了,由于初始的代码实在Codeblocks里编写的,所以复制到VC++ 6.0后,修改了很长时间的代码,从中学到不少书本上没有的知识。令人欣慰的是,最终摆脱了黑底白字的命令行,实现图形界面的操作。但是,在学习过程中,并没有真正运用到VC++的特性,只是将代码与图形界面生拉硬拽联系上的,在以后的学习中,还要努力。 八、附录:核心代码清单 #include "stdafx.h" #include #include #include "resource.h" #include "MainDlg.h" #include #include "iostream" #include "shellapi.h" #include "string.h" #include "stdlib.h" #include "stdio.h" /************************包含的函数*************************/ int addCar(carNode* head,char*path,char *strNum ,char *name,char *strJourney, char *infor); float Benifit(Head &head, float &fee, float &earn);float Charge(int num, int journey,int t, carNode *p);int delCar(Head &head,int num);void destroyLink(Head &head);carNode* findCar(Head head, int num);carNode* findCarLable(Head head, int i);carNode* findCarName(Head head, TCHAR name[256]);void initCarRecord(carRecord &record);void initNode(carNode *node);void linkInsert(carNode *head, carNode *node);int loadRecord(char *path,carNode *head ,int lable);void Main_OnClose(HWND hwnd);void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify);BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam);BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);int node1MoveTo2(carNode *head1, carNode *head2,int n);carNode* nodeSortAvailable(carNode *head,int n);carNode* nodeSortRented(carNode *head,int n);carNode* nodeSortRepair(carNode *head,int n);int putInFile(carNode* head, char *path,int n);int rentCar(Head &head, int num,int rt);int repairCar(Head &head, int num,int rpt);float returnCar(Head &head, int num,int l,int t);int returnRepairCar(Head &head, int num,float fee);/****************************************************************/ /**************部分核心代码*******************/ void linkInsert(carNode *head, carNode *node)//插入节点 { node->Next = head->Next; if(head->Next) head->Next->Front=node; head->Next = node; node->Front = head; } //移动节点 int node1MoveTo2(carNode *head1, carNode *head2,int n) { carNode *p; p=head1->Next; while(p) { if(p->Record.Number==n) break; p=p->Next; } if(p==NULL) return 1; else if(p->Next==NULL) p->Front->Next = p->Next; else { p->Next->Front = p->Front; p->Front->Next = p->Next; } linkInsert(head2,p); return 0; } //导入文本数据 int loadRecord(char *path,carNode *head ,int lable) { int num,i; FILE *file= fopen(path,"rt"); fscanf(file,"%d\\n",&num); carNode **Cars; Cars = (carNode**)malloc(num*sizeof(carNode*)); for(i=0 ; i Cars[i]=(carNode*)malloc(sizeof(carNode)); initNode(Cars[i]); } for(i=0 ; i Cars[i]->Record.Name = (char *)malloc(NMAX); fscanf(file,"%d\\n",&Cars[i]->Record.Number); fgets(Cars[i]->Record.Name,NMAX,file); fscanf(file,"%s\\n",&Cars[i]->Record.Name); fscanf(file,"%d\\n",&Cars[i]->Record.Journey); fscanf(file,"%d\\n",&Cars[i]->Record.RentedTime); fscanf(file,"%d\\n",&Cars[i]->Record.RepairTime); fscanf(file,"%f\\n",&Cars[i]->Record.Fee); fscanf(file,"%f\\n",&Cars[i]->Record.Earn); fscanf(file,"%f\\n",&Cars[i]->Record.Benifit); Cars[i]->Record.Information = (char *)malloc(IMAX); fgets(Cars[i]->Record.Information,IMAX,file); Cars[i]->Record.Lable = lable++ ; itoa(Cars[i]->Record.Number, Cars[i]->Record.Way, 10); if(i==0) { Cars[i]->Next=head->Next; head->Next = Cars[i]; Cars[i]->Front = head; } else if(i) linkInsert(head,Cars[i]); } fclose(file); return num; } //对车库里的车进行排序 carNode* nodeSortAvailable(carNode *head,int n) { carNode *head1,*q,*p,*u; int i=0; head1=(carNode*)malloc(sizeof(carNode)); initNode(head1); u= head1->Next; if(head->Next) { p=head->Next; q=p; } else return head; while(i while(p) { p =p->Next; if(p!=NULL&&(q->Record.Journey } if(q->Next==NULL) q->Front->Next=q->Next; else if(q->Next) { q->Front->Next=q->Next; q->Next->Front =q->Front; } linkInsert(head1, q); ++i; p=head->Next; q=p; } q=head; while(q) { u=q; q=q->Next; free(u); } head= head1; free(q); free(p); return head1; } //添加车辆 int addCar(carNode* head,char*path,char *strNum ,char *name,char *strJourney, char *infor) { carNode* node; node=(carNode*)malloc(sizeof(carNode)); initNode(node); node->Record.Name = (char *)malloc(NMAX); node->Record.Information = (char *)malloc(IMAX); int number = atoi(strNum); int journey = atoi(strJourney); node->Record.Number= number; node->Record.Name = name; node->Record.Journey = journey; node->Record.Information = infor; if(number ==0 ||name=="\\n" ||journey==0||infor =="\\n" ) return 1; node->Record.RentedTime=0; node->Record.RepairTime=0; node->Record.Fee=0; node->Record.Earn=0; FILE *fp=fopen(path,"w"); fprintf(fp,"%d\\n%s\\n%d\\n%d\\n%d\\n%.2f\\n%.2f\\n%s\\n",node->Record.Number,node->Record.Name,node->Record.Journey,node->Record.RentedTime,node->Record.RepairTime,node->Record.Fee,node->Record.Earn,node->Record.Information); fclose(fp); FILE *file = fopen(path,"rt"); fscanf(file,"%d\\n",&node->Record.Number); fgets(node->Record.Name,NMAX,file); fscanf(file,"%d\\n",&node->Record.Journey); fscanf(file,"%d\\n",&node->Record.RentedTime); fscanf(file,"%d\\n",&node->Record.RepairTime); fscanf(file,"%f\\n",&node->Record.Fee); fscanf(file,"%f\\n",&node->Record.Earn); fgets(node->Record.Information,IMAX,file); if(head->Next==NULL) { node->Next=head->Next; head->Next =node; node->Front = head; } else if(head->Next!=NULL) linkInsert(head,node); return 0; } //保存导出数据 int putInFile(carNode* head, char *path,int n) { FILE *fp=fopen(path,"w"); carNode* p; p=head->Next; fprintf(fp,"%d\\n",n); while(p) { fprintf(fp,"%d\\n%s%d\\n%d\\n%d\\n%.2f\\n%.2f\\n%.2f\\n%s", p->Record.Number,p->Record.Name,p->Record.Journey,p->Record.RentedTime,p->Record.RepairTime,p->Record.Fee,p->Record.Earn,p->Record.Benifit,p->Record.Informatin); p=p->Next; } fclose(fp); free(p); return 0; } //查看收益 float Benifit(Head &head, float &fee, float &earn) { carNode* p; float ben; p=head.Available->Next; if(p) { while(p) { earn =earn +p->Record.Earn; fee = fee+ p->Record.Fee; p=p->Next; } } p=head.Rented->Next; if(p) { while(p) { earn =earn +p->Record.Earn; fee = fee+ p->Record.Fee; p=p->Next; } } p=head.Repair->Next; if(p) { while(p) { earn =earn +p->Record.Earn; fee = fee+ p->Record.Fee; p=p->Next; } } ben = earn -fee; return ben; } //删除车辆 int delCar(Head &head,int num) { carNode *p; int n=0; p=head.Available->Next; while(p) { if(p->Record.Number==num) { n=num; break; } p=p->Next; } if(n==0) return 1; else if(n!=0) { p->Front->Next = p->Next; if(p->Next!=NULL) p->Next->Front =p->Front; head.aN--; free(p); return 0; } return 0; } //初始化对话框 BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) { HWND hwndCombocars =GetDlgItem(hwnd,IDC_COMBOCARS); HWND hwndComboSearch =GetDlgItem(hwnd,IDC_COMBOSEARCH); ComboBox_InsertString(hwndComboSearch,-1,"车牌"); ComboBox_InsertString(hwndComboSearch,-1,"车名"); char *pathA,*pathRe,*pathRep; pathA="CarsAvailable.txt"; pathRe="CarsRented.txt"; pathRep="CarsRepair.txt"; Head H; int lable=0; H.Available=(carNode*)malloc(sizeof(carNode)); initNode(H.Available); H.Rented=(carNode*)malloc(sizeof(carNode)); initNode(H.Rented); H.Repair=(carNode*)malloc(sizeof(carNode)); initNode(H.Repair); H.aN= loadRecord(pathA,H.Available,lable); lable = H.aN; H.reN= loadRecord(pathRe,H.Rented,lable); lable = H.aN+H.reN; H.repN= loadRecord(pathRep,H.Repair,lable); H.Available =nodeSortAvailable(H.Available, H.aN); H.Repair = nodeSortRepair(H.Repair,H.repN); H.Rented=nodeSortRented(H.Rented,H.reN); carNode* p; p=H.Available->Next; while(p!=NULL) { ComboBox_AddString(hwndCombocars,p->Record.Name); p=p->Next; } p=H.Rented->Next; while(p!=NULL) { ComboBox_AddString(hwndCombocars,p->Record.Name); p=p->Next; } p=H.Repair->Next; while(p!=NULL) { ComboBox_AddString(hwndCombocars,p->Record.Name); p=p->Next; } return TRUE; } //对话框窗口操作 void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) { HWND hwndCombocars =GetDlgItem(hwnd,IDC_COMBOCARS); HWND hwndComboSearch =GetDlgItem(hwnd,IDC_COMBOSEARCH); HWND hwndCombocars =GetDlgItem(hwnd,IDC_COMBOCARS); HWND hwndComboSearch =GetDlgItem(hwnd,IDC_COMBOSEARCH); char *pathA,*pathRe,*pathRep; int lable=0; pathA="CarsAvailable.txt"; pathRe="CarsRented.txt"; pathRep="CarsRepair.txt"; Head H; H.aN=0; H.reN=0; H.repN=0; H.Available=NULL; H.Rented = NULL; H.Repair = NULL; H.Available=(carNode*)malloc(sizeof(carNode)); initNode(H.Available); H.Rented=(carNode*)malloc(sizeof(carNode)); initNode(H.Rented); H.Repair=(carNode*)malloc(sizeof(carNode)); initNode(H.Repair); H.aN= loadRecord(pathA,H.Available,lable); lable = H.aN; H.reN= loadRecord(pathRe,H.Rented,lable); lable = H.aN+H.reN; H.repN= loadRecord(pathRep,H.Repair,lable); H.Available =nodeSortAvailable(H.Available, H.aN); H.Repair = nodeSortRepair(H.Repair,H.repN); H.Rented=nodeSortRented(H.Rented,H.reN); FILE *fileA = fopen("CarsAvailable.txt int iCount = ComboBox_GetCount(hwndCombocars); int searchStat =0;switch(id) { case ID_MENUOUT: { int out=0; out = putInFile(H.Available, pathA,H.aN); out = putInFile(H.Rented, pathRe,H.reN); out = putInFile(H.Repair, pathRep,H.repN); destroyLink(H); H.Available=(carNode*)malloc(sizeof(carNode)); initNode(H.Available); H.Rented=(carNode*)malloc(sizeof(carNode)); initNode(H.Rented); H.Repair=(carNode*)malloc(sizeof(carNode)); initNode(H.Repair); H.aN= loadRecord(pathA,H.Available,lable); lable = H.aN; H.reN= loadRecord(pathRe,H.Rented,lable); lable = H.aN+H.reN; H.repN= loadRecord(pathRep,H.Repair,lable); H.Available =nodeSortAvailable(H.Available, H.aN); H.Repair = nodeSortRepair(H.Repair,H.repN); H.Rented=nodeSortRented(H.Rented,H.reN); if(out ==0) MessageBox(hwnd,TEXT("成功保存"),TEXT("恭喜"),MB_OK|MB_ICONEXCLAMATION); } break; case IDC_SEARCHCAR: { searchStat = ComboBox_GetCurSel(hwndComboSearch); if(searchStat ==0) { TCHAR strSearch[256]; int curFind; GetDlgItemText(hwnd,IDC_EDITSEARCH,strSearch,sizeof(strSearch)); //SetDlgItemText(hwnd,IDC_EDITSEARCH,""); curFind = atoi(strSearch); carNode* q; q =findCar(H,curFind); if(q!=0) { TCHAR strNum[256]; TCHAR strJourney[256]; TCHAR strReT[256]; TCHAR strRepT[256]; TCHAR strEarn[256]; TCHAR strFee[256]; TCHAR strBen[256]; itoa(q->Record.Number, strNum,10); itoa(q->Record.Journey, strJourney,10); itoa(q->Record.RentedTime, strReT,10); itoa(q->Record.RepairTime, strRepT,10); itoa(q->Record.Earn, strEarn,10); itoa(q->Record.Fee, strFee,10); itoa(q->Record.Benifit, strBen,10); ShellExecute(NULL,NULL,q->Record.Way,NULL,NULL,SW_SHOWNORMAL); SetDlgItemText(hwnd,IDC_EDITNAME,q->Record.Name); SetDlgItemText(hwnd,IDC_EDITCARNUM,strNum); SetDlgItemText(hwnd,IDC_EDITCARL,strJourney); SetDlgItemText(hwnd,IDC_EDITRET,strReT); SetDlgItemText(hwnd,IDC_EDITREPT,strRepT); SetDlgItemText(hwnd,IDC_EDITEARN,strEarn); SetDlgItemText(hwnd,IDC_EDITFEE,strFee); SetDlgItemText(hwnd,IDC_EDITBEN,strBen); SetDlgItemText(hwnd,IDC_EDITINFOR,q->Record.Information); /****************************/ if(q->Record.RentedTime!=0) SetDlgItemText(hwnd,IDC_EDITSTAT,"已经借出"); else if(q->Record.RepairTime!=0) SetDlgItemText(hwnd,IDC_EDITSTAT,"正在维修"); else SetDlgItemText(hwnd,IDC_EDITSTAT,"可借"); /****************************/ } if(q==0) { MessageBox(hwnd,TEXT("没有此汽车!"),TEXT("Soory"),MB_OK|MB_ICONEXCLAMATION); SetDlgItemText(hwnd,IDC_EDITSEARCH,""); } } else if(searchStat ==1) { TCHAR strSearchName[256]; FILE *fileS=fopen("SearchCars.txt GetDlgItemText(hwnd,IDC_EDITSEARCH,strSearchName,sizeof(strSearchName)); fprintf(fileS,"%s\\n",strSearchName); fflush(fileS); fclose(fileS); FILE *fileSS=fopen("SearchCars.txt fgets(strSearchName, NMAX,fileSS); fclose(fileSS); carNode* p; p =findCarName(H,strSearchName); if(p!=0) { TCHAR strNum[256]; TCHAR strJourney[256]; TCHAR strReT[256]; TCHAR strRepT[256]; TCHAR strEarn[256]; TCHAR strFee[256]; TCHAR strBen[256]; itoa(p->Record.Number, strNum,10); itoa(p->Record.Journey, strJourney,10); itoa(p->Record.RentedTime, strReT,10); itoa(p->Record.RepairTime, strRepT,10); itoa(p->Record.Earn, strEarn,10); itoa(p->Record.Fee, strFee,10); itoa(p->Record.Benifit, strBen,10); ShellExecute(NULL,NULL,p->Record.Way,NULL,NULL,SW_SHOWNORMAL); SetDlgItemText(hwnd,IDC_EDITNAME,p->Record.Name); SetDlgItemText(hwnd,IDC_EDITCARNUM,strNum); SetDlgItemText(hwnd,IDC_EDITCARL,strJourney); SetDlgItemText(hwnd,IDC_EDITRET,strReT); SetDlgItemText(hwnd,IDC_EDITREPT,strRepT); SetDlgItemText(hwnd,IDC_EDITEARN,strEarn); SetDlgItemText(hwnd,IDC_EDITFEE,strFee); SetDlgItemText(hwnd,IDC_EDITBEN,strBen); SetDlgItemText(hwnd,IDC_EDITINFOR,p->Record.Information); /****************************/ if(p->Record.RentedTime!=0) SetDlgItemText(hwnd,IDC_EDITSTAT,"已经借出"); else if(p->Record.RepairTime!=0) SetDlgItemText(hwnd,IDC_EDITSTAT,"正在维修"); else SetDlgItemText(hwnd,IDC_EDITSTAT,"可借"); /****************************/ } if(p==0) { MessageBox(hwnd,TEXT("没有此汽车name!"),TEXT("Soory"),MB_OK|MB_ICONEXCLAMATION); SetDlgItemText(hwnd,IDC_EDITSEARCH,""); } } } break; case IDC_ADDCAR: { TCHAR strAddName[256]; TCHAR strAddNum[256]; TCHAR strAddJourney[256]; TCHAR strAddInfor[IMAX]; int Add; GetDlgItemText(hwnd,IDC_EDITNAME,strAddName,sizeof(strAddName)); GetDlgItemText(hwnd,IDC_EDITCARNUM,strAddNum,sizeof(strAddNum)); GetDlgItemText(hwnd,IDC_EDITCARL,strAddJourney,sizeof(strAddJourney)); GetDlgItemText(hwnd,IDC_EDITINFOR,strAddInfor,sizeof(strAddInfor)); H.aN++; Add=addCar(H.Available,TEXT("AddNewCar.txt"), strAddNum, strAddName, strAddJourney, strAddInfor); if(Add == 1) { MessageBox(hwnd,TEXT("请输入完整车牌,车名,原始里程,信息!"),TEXT("通知"),MB_OK|MB_ICONEXCLAMATION); } else if(Add ==0) { MessageBox(hwnd,TEXT("成功添加"),TEXT("恭喜"),MB_OK|MB_ICONEXCLAMATION); putInFile(H.Available, TEXT("CarsAvailable.txt"),H.aN); H.Available =nodeSortAvailable(H.Available, H.aN); H.Repair = nodeSortRepair(H.Repair,H.repN); H.Rented=nodeSortRented(H.Rented,H.reN); ComboBox_ResetContent(hwndCombocars); destroyLink(H); H.Available=(carNode*)malloc(sizeof(carNode)); initNode(H.Available); H.Rented=(carNode*)malloc(sizeof(carNode)); initNode(H.Rented); H.Repair=(carNode*)malloc(sizeof(carNode)); initNode(H.Repair); H.aN= loadRecord(pathA,H.Available,lable); lable = H.aN; H.reN= loadRecord(pathRe,H.Rented,lable); lable = H.aN+H.reN; H.repN= loadRecord(pathRep,H.Repair,lable); H.Available =nodeSortAvailable(H.Available, H.aN); H.Repair = nodeSortRepair(H.Repair,H.repN); H.Rented=nodeSortRented(H.Rented,H.reN); carNode* p; p=H.Available->Next; while(p!=NULL) { ComboBox_AddString(hwndCombocars,p->Record.Name); p=p->Next; } p=H.Rented->Next; while(p!=NULL) { ComboBox_AddString(hwndCombocars,p->Record.Name); p=p->Next; } p=H.Repair->Next; while(p!=NULL) { ComboBox_AddString(hwndCombocars,p->Record.Name); p=p->Next; } } /***************省略其他按钮*******************/ case ID_MENUQUIT: EndDialog(hwnd, 0); break; default: break; } } int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { InitCommonControls(); DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, Main_Proc); return 0; } /********************结束*********************/下载本文