C语言 车辆出租管理系统

这个项目是我今年的C语言课设。做这个项目一个人大概用了一天的时间来完成,整体将近700行,量不是很多,所以也没用多文件什么的,当然也是采用了模块化设计的思路,在代码中写了几个函数来实现特定的功能。
以下是这个项目的一些要求和全部源码。

一、软件开发目的

该软件主要是使用C语言设计开发一个简单的车辆租赁管理系统,实现租赁信息的查询、修改、删除、添加以及订单的查询等功能。

二、数据结构

程序中采用结构体数组存储租赁信息。租赁结构体成员包括:订单号、身份证号、车牌号、费用。数组的长度不超过100。

三、软件功能说明

1.租赁信息的录入和保存:

输入租赁信息包括:订单号、身份证号、车牌号、费用。还车前费用为0。在录入数据的同时,系统将对信息的合法性进行检验,若录入了不合法的数据系统应作出提示,并且要求重新输入。

2.显示单条租赁信息:

将租赁信息在屏幕上列表输出。要求先显示提示信息“订单号、身份证号、车牌号、费用”,然后再显示租赁信息,每行显示一条租赁信息。

3.查询单条租赁信息

输入身份证号进行查询,输出符合条件的租赁信息,输出订单号、身份证号、车牌号、费用。

4.查询每辆车的租赁费用:

输入车牌号进行查询,输出该车所有租赁的总费用。输出车牌号、总费用。

5.添加租赁信息

输入新的租赁信息,将新的信息插入原租赁信息清单中,并将新的列表输出,以方便用户确认。

6.修改、删除租赁信息

通过身份证号对某条租赁信息进行进行修改和删除,并将租赁信息列表输出,以方便用户确认。

7.统计:

(1)统计输出当月订单总金额
(2)统计输出订单金额最高的车牌号

8.退出系统,结束任务。

以下是该程序的全部代码

#include<stdio.h>
#include<stdlib.h>
#include<windows.h> 
#include<conio.h>
#include<string.h>

HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
int loop = 0;

int menu();
int menu_2();
int menu_3();
void gotoxy();
void HideCursor();
void InsertInformation();
void PrintInformation();
void IdSearch();
void PlateNumber();
void ExitSystem();
void ReviseInformation();
void DeleteInformation();
void AddInformation();
void MoneySum(); 
void ChampionCar();

struct information{
    int theOrderNumber;
    char IdNumber[20];
    char PlateNumber[10];
    double Cost;
}car[999999];

int key;

int main(){
    HideCursor();
    menu();
    key = menu();
    switch(key){
        case 1:
            InsertInformation();
            break;
        case 2:
            PrintInformation();
            break;
        case 3:
            menu_2(); 
            switch(menu_2()){
                case 1:
                    MoneySum(); 
                    break;
                case 2:
                    ChampionCar();
                    break;
                case 3:
                    system("cls");
                    main();
                    break;
                case 4:
                    ExitSystem();
                    break;
            }
            break;
        case 4:
            ReviseInformation();
            break;
        case 5:
            DeleteInformation(); 
            break;
        case 6:
            AddInformation();
            break;
        case 7:
            menu_3(); 
            switch(menu_3()){
                case 1:
                    MoneySum();
                    break;
                case 2:
                    ChampionCar(); 
                    break;
                case 3:
                    system("cls");
                    main();
                    break;
                case 4:
                    ExitSystem();
                    break;
            }
            break;
        case 8:
            ExitSystem();
            break;
    }
    return 0;
}

void gotoxy(short x, short y) {
    COORD coord = { x,y };/*定义结构体变量coord*/
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}

void HideCursor() {
    CONSOLE_CURSOR_INFO cursor_info = { 1,0 };
    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
}

int menu(void){
    int i,choose;
    gotoxy(50,5);
    for(i = 0;i < 20 ; i++){
        printf("-");
    }
    for(i = 0;i <5; i++){
        gotoxy(49 - 2 * i,6 + i);
        printf("/");
    }
    for(i = 0;i < 50;i++){
        gotoxy(25+i,10); 
        printf("-");
    } 
    for(i = 0;i < 5;i++){
        gotoxy(25,11+i);
        printf("|");
    }
    gotoxy(35,13);
    printf("欢迎使用汽车租赁管理系统");
    gotoxy(40,15);
    printf("[1]信息录入");
    gotoxy(40,16);
    printf("[2]信息显示");
    gotoxy(40,17);
    printf("[3]查询信息");
    gotoxy(40,18);
    printf("[4]修改信息");
    gotoxy(40,19);
    printf("[5]删除信息");
    gotoxy(40,20);
    printf("[6]追加信息");
    gotoxy(40,21);
    printf("[7]统计信息");
    gotoxy(40,22);
    printf("[8]退出");
    gotoxy(40,26);
    printf("Zenith 版权所有");
    gotoxy(40,23);
    printf("请选择(1-8):"); 
    scanf("%d",&choose); 
    while(choose<1 || choose>8){
        printf("请输入范围为1-8的整数");
        gotoxy(40,23);
        printf("请选择(1-8):"); 
        scanf("%d",&choose); 
    }
    return choose; 
}

int menu_2(void){
    system("cls");
    int i,choose;
    gotoxy(50,5);
    for(i = 0;i < 20 ; i++){
        printf("-");
    }
    for(i = 0;i <5; i++){
        gotoxy(49 - 2 * i,6 + i);
        printf("/");
    }
    for(i = 0;i < 50;i++){
        gotoxy(25+i,10); 
        printf("-");
    } 
    for(i = 0;i < 5;i++){
        gotoxy(25,11+i);
        printf("|");
    }
    gotoxy(35,13);
    printf("欢迎使用汽车租赁管理系统");
    gotoxy(40,15);
    printf("[1]按照身份证号检索");
    gotoxy(40,16);
    printf("[2]按照车牌号检索");
    gotoxy(40,17);
    printf("[3]返回主菜单");
    gotoxy(40,18);
    printf("[4]退出系统");
    gotoxy(40,26);
    printf("Zenith 版权所有");
    gotoxy(40,23);
    printf("请选择(1-4):"); 
    scanf("%d",&choose); 
    while(choose<1 || choose>8){
        printf("请输入范围为1-4的整数");
        gotoxy(40,23);
        printf("请选择(1-4):"); 
        scanf("%d",&choose); 
    }
    return choose; 
}

int menu_3(void){
    system("cls");
    int i,choose;
    gotoxy(50,5);
    for(i = 0;i < 20 ; i++){
        printf("-");
    }
    for(i = 0;i <5; i++){
        gotoxy(49 - 2 * i,6 + i);
        printf("/");
    }
    for(i = 0;i < 50;i++){
        gotoxy(25+i,10); 
        printf("-");
    } 
    for(i = 0;i < 5;i++){
        gotoxy(25,11+i);
        printf("|");
    }
    gotoxy(35,13);
    printf("欢迎使用汽车租赁管理系统");
    gotoxy(40,15);
    printf("[1]查看车辆总收入");
    gotoxy(40,16);
    printf("[2]查看盈利冠军车辆");
    gotoxy(40,17);
    printf("[3]返回主菜单");
    gotoxy(40,18);
    printf("[4]退出系统");
    gotoxy(40,26);
    printf("Zenith 版权所有");
    gotoxy(40,23);
    printf("请选择(1-4):"); 
    scanf("%d",&choose); 
    while(choose<1 || choose>8){
        printf("请输入范围为1-4的整数");
        gotoxy(40,23);
        printf("请选择(1-4):"); 
        scanf("%d",&choose); 
    }
    return choose; 
}

void InsertInformation(){
    system("cls");
    int a,k,j,x,one;
    double cost; 
    int i = 0; 
    do{  
        printf("\n----------------------------------------------------\n");  
        printf("\t      ———信息录入———\n\n");  
        fflush(stdin);                                   //清空缓冲区 
        printf("请输入订单号(1-999999):");  
        scanf("%d", &x);  
        while( x<1 || x>100){  
            printf("订单号范围为1~100:");  
            scanf("%d", &x);
        } 
        one=0;  
        for(j=0;j < loop;j++){  
            if(x==car[j].theOrderNumber){  
                one=1;  
                printf("\n记录中已有!不得重复添加...");  
                getch();  
                system("cls");  
                menu();  
            }  
        }  
        if(one==0){  
            car[loop].theOrderNumber = x;  
        }  
        printf("请输入身份证号:");  
        getchar();  
        gets(car[loop].IdNumber);  
        printf("请输入车牌号:");  
        scanf("%s",&car[loop].PlateNumber);
        printf("请输入费用:");  
        scanf("%lf", &cost);
        car[loop].Cost = cost;
        loop++;  
        printf("\n添加完毕!  目前共有%d辆车!\n按1回到主界面!按2继续添加信息!按其他键退出程序!  ",loop);  
        scanf("%d", &a);  
    }while(a==2);  
    if (a == 1){  
        system("cls");  
        main();  
    }  
    if (a != 1){  
        ExitSystem();
    }  
}

void PrintInformation(){
    system("cls");
    int a,j; 
    printf("\n----------------------------------------------------\n");
    printf("\t      ———信息显示———\n\n");
    if(loop == 0){
        printf("Error,无数据,请添加数据后再试\n");
    }
    else{
        gotoxy(3,5);
        printf("订单号");
        gotoxy(10,5);
        printf("身份证号");
        gotoxy(32,5);
        printf("车牌号");
        gotoxy(45,5);
        printf("费用");
        for(j = 0;j < loop;j++ ){
            gotoxy(3,7+j);
            printf("%d",car[j].theOrderNumber);
            gotoxy(10,7+j);
            printf("%s",car[j].IdNumber);
            gotoxy(32,7+j);
            printf("%s",car[j].PlateNumber);
            gotoxy(45,7+j);
            printf("%f",car[j].Cost);
        } 
    }
    printf("\n显示完毕!  目前共有%d辆车!\n按1回到主界面!按其他键退出程序!  ",loop);  
    scanf("%d", &a); 
    if (a == 1){  
        system("cls");  
        main();  
    }  
    if (a != 1){  
        ExitSystem();
    } 
} 

void IdSearch(){
    char idnumber[20];
    int i,j,a;
    do{
        system("cls");  
        printf("\n----------------------------------------------------\n");
        printf("\t      ———查询(按照身份证号)———\n\n");
        if(loop == 0){
            gotoxy(3,5);
            printf("无数据,请录入数据后查询,输入任意键返回主菜单");
            getch();
            system("cls");
            main();
        }
        gotoxy(3,5);
        printf("请输入需要查询的身份证号:");
        scanf("%s",&idnumber);
        j = 0;
        for(i=0;i < loop;i++){  
            if(strcmp(idnumber,car[i].IdNumber) == 0){
                j=1;
                gotoxy(3,7);
                printf("订单号");
                gotoxy(10,7);
                printf("身份证号");
                gotoxy(32,7);
                printf("车牌号");
                gotoxy(45,7);
                printf("费用");
                gotoxy(3,9);
                printf("%d",car[i].theOrderNumber);
                gotoxy(10,9);
                printf("%s",car[i].IdNumber);
                gotoxy(32,9);
                printf("%s",car[i].PlateNumber);
                gotoxy(45,9);
                printf("%f",car[i].Cost);
                break;
            }
            if(j == 0){
                gotoxy(3,7);
                printf("对不起,未查询到您输入的身份证号,请核实后重新输入");
                break; 
            }
        }
        gotoxy(3,11);
        printf("查询完成,输入1继续查询,输入2返回主菜单,按其他键退出程序!");
        scanf("%d",&a);
    }while(a == 1);
    if (a == 2){  
        system("cls");  
        main();  
    }  
    if (a != 1){  
        ExitSystem();
    } 
}

void PlateNumber(){
    char platenumber[10];
    int i,j,a;
    do{
        system("cls");  
        printf("\n----------------------------------------------------\n");
        printf("\t      ———查询(按照车牌号)———\n\n");
        if(loop == 0){
            gotoxy(3,5);
            printf("无数据,请录入数据后查询,输入任意键返回主菜单");
            getch();
            system("cls");
            main();
        }
        gotoxy(3,5);
        printf("请输入需要查询的车牌号:");
        scanf("%s",&platenumber);
        j = 0;
        for(i=0;i < loop;i++){  
            if(strcmp(platenumber,car[i].PlateNumber) == 0){
                j=1;
                gotoxy(3,7);
                printf("订单号");
                gotoxy(10,7);
                printf("身份证号");
                gotoxy(32,7);
                printf("车牌号");
                gotoxy(45,7);
                printf("费用");
                gotoxy(3,9);
                printf("%d",car[i].theOrderNumber);
                gotoxy(10,9);
                printf("%s",car[i].IdNumber);
                gotoxy(32,9);
                printf("%s",car[i].PlateNumber);
                gotoxy(45,9);
                printf("%f",car[i].Cost);
                break;
            }
            if(j == 0){
                gotoxy(3,7);
                printf("对不起,未查询到您输入的车牌号,请核实后重新输入");
                break; 
            }
        }
        gotoxy(3,11);
        printf("查询完成,输入1继续查询,输入2返回主菜单,按其他键退出程序!");
        scanf("%d",&a);
    }while(a == 1);
    if (a == 2){  
        system("cls");  
        main();  
    }  
    if (a != 1){  
        ExitSystem();
    } 
}

void ReviseInformation(){
    char idnumber[20];
    int i,j,a,b,c,cost;
    do{
        system("cls");  
        printf("\n----------------------------------------------------\n");
        printf("\t      ———信息修改———\n\n");
        if(loop == 0){
            gotoxy(3,5);
            printf("无数据,请录入数据后查询,输入任意键返回主菜单");
            getch();
            system("cls");
            main();
        }
        gotoxy(3,5);
        printf("请输入需要修改的信息的身份证号:");
        scanf("%s",&idnumber);
        j = 0;
        for(i=0;i < loop;i++){  
            if(strcmp(idnumber,car[i].IdNumber) == 0){
                j=1;
                do{
                    system("cls");
                    printf("\n----------------------------------------------------\n");
                    gotoxy(3,6);
                    printf("您想要修改的条目如下");
                    gotoxy(3,7);
                    printf("订单号");
                    gotoxy(10,7);
                    printf("身份证号");
                    gotoxy(32,7);
                    printf("车牌号");
                    gotoxy(45,7);
                    printf("费用");
                    gotoxy(3,9);
                    printf("%d",car[i].theOrderNumber);
                    gotoxy(10,9);
                    printf("%s",car[i].IdNumber);
                    gotoxy(32,9);
                    printf("%s",car[i].PlateNumber);
                    gotoxy(45,9);
                    printf("%f",car[i].Cost);
                    printf("\n\n\t      ———信息修改———\n\n");
                    printf("请选择需要修改的项目\n"); 
                    printf("\t[1]身份证号\n"); 
                    printf("\t[2]车牌号\n"); 
                    printf("\t[3]费用\n"); 
                    scanf("%d",&b);
                    switch(b){
                        case 1:
                            printf("\n请输入身份证号:");  
                            getchar();  
                            gets(car[i].IdNumber);
                            break;
                        case 2:
                            printf("\n请输入车牌号:");  
                            scanf("%s",&car[i].PlateNumber);
                            break;
                        case 3:
                            printf("请输入费用:");  
                            scanf("%lf", &cost);
                            car[i].Cost = cost;
                            break;
                    }
                    printf("修改完成,输入1继续修改,输入其他键结束对此条目的修改");
                    scanf("%d",&c); 
                }while(c == 1);
                break;
            }
            if(j == 0){
                gotoxy(3,7);
                printf("对不起,未查询到您输入的身份证号,请核实后重新输入");
                break; 
            }
        }
        gotoxy(3,15);
        printf("输入1继续修改其他条目,输入2返回主菜单,按其他键退出程序!");
        scanf("%d",&a);
    }while(a == 1);
    if (a == 2){  
        system("cls");  
        main();  
    }  
    if (a != 1){  
        ExitSystem();
    } 
} 

void DeleteInformation(){
    int j,x,k;  
    char idnumber[20];  
    system("cls");  
    printf("\n----------------------------------------------------\n");
    printf("\t      ———信息删除———\n\n");
    printf("\t      请输入需要删除的条目的身份证号:");  
    scanf("%s",idnumber);  
    k=0;
    for(j=0;j <= loop;j++){  
        if(strcmp(idnumber,car[j].IdNumber)==0){  
            k=1;  
            for( x = j; x<=loop ; x++){  
                car[x]=car[x+1];  
            }  
            loop--; 
            printf("\n\t      删除成功!"); 
            break;  
        }  
    }  
    if(k==0){  
        printf("\t      对不起,记录中没有此条目...");  
        printf("输入任意键退出");
        getch();  
        system("cls");  
        main();  
    } 
    printf("输入任意键退出");
    getch();  
    system("cls");  
    main(); 
}

void AddInformation(){
    int i,x,j,one,row;
    double cost;
    loop++; 
    system("cls");  
    printf("\n----------------------------------------------------\n");
    printf("\t      ———信息追加———\n\n");
    gotoxy(3,5);
    if(loop == 1){
        printf("请在录入信息后选择此功能,按任意键退出!");
        getch();
        loop--;
        system("cls");
        main(); 
    }
    printf("请输入在第几行增添数据");
    scanf("%d",&row);
    if(row >= loop){
        do{
            printf("输入的行数必须小于已有的条目数!请重新输入:");
            scanf("%d",&row);
        }while(row<=loop);
    }
    for(i = loop;i >= row;i--){
        car[i] = car[i - 1];
    }
    printf("请输入订单号(1-100):");  
    scanf("%d", &x);  
    while( x<1 || x>100){  
        printf("订单号范围为1~100:");  
        scanf("%d", &x);
    } 
    one=0;  
    for(j=0;j < loop;j++){  
        if(x==car[j].theOrderNumber){  
            one=1;  
            printf("\n记录中已有!不得重复添加...");  
            getch();  
            system("cls");  
            main();  
        }  
    }  
    if(one==0){  
        car[row].theOrderNumber = x;  
    }  
    printf("请输入身份证号:");  
    getchar();  
    gets(car[row].IdNumber);  
    printf("请输入车牌号:"); 
    scanf("%s",&car[row].PlateNumber);
    printf("请输入费用:");  
    scanf("%lf", &cost);
    car[row].Cost = cost;
    printf("\n\t追加完成,请按任意键返回主菜单"); 
    getch();
    system("cls");
    main(); 
}

void MoneySum(){
    int i;
    double sum = 0;
    system("cls");  
    printf("\n----------------------------------------------------\n");
    printf("\t      ———信息统计(车辆总收入)———\n\n");
    for(i = 0;i <= loop ; i++){
        sum = sum + car[i].Cost;
    }
    gotoxy(3,5);
    printf("截至目前所有车辆总收入为%lf",sum); 
    gotoxy(3,6);
    printf("按任意键返回主菜单");
    getch();
    system("cls");
    main(); 
}

void ChampionCar(){
    int i,j;
    double high = 0; 
    system("cls");  
    printf("\n----------------------------------------------------\n");
    printf("\t      ———信息统计(盈利冠军车辆)———\n\n");
    for(i = 0;i < loop;i++){
        if(car[i].Cost >= high){
            high = car[i].Cost;
            j = i;
        }
    }
    gotoxy(3,5);
    printf("截止目前盈利冠军车辆为收入%lf元的%s",high,car[j].PlateNumber);
    gotoxy(3,6);
    printf("按任意键返回主菜单");
    getch();
    system("cls");
    main(); 
} 

void ExitSystem(){
    system("cls");
    printf("\n退出系统中...");  
    Sleep(1000);  
    exit(0);
} 

猜你喜欢

转载自blog.csdn.net/qq_32350131/article/details/80685959