视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
C语言 汽车租赁管理系统实习报告书
2025-09-29 17:15:27 责编:小OO
文档
西北农林科技大学信息工程学院

《数据结构与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.JourneyRecord.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.JourneyRecord.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;

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;

}

/********************结束*********************/下载本文

显示全文
专题