C語(yǔ)言實(shí)現(xiàn)車(chē)輛出租管理系統(tǒng)
這個(gè)項(xiàng)目是我今年的C語(yǔ)言課設(shè)。做這個(gè)項(xiàng)目一個(gè)人用了一天的時(shí)間來(lái)完成,整體將近700行,量不是很多,所以也沒(méi)用多文件什么的,當(dāng)然也是采用了模塊化設(shè)計(jì)的思路,在代碼中寫(xiě)了幾個(gè)函數(shù)來(lái)實(shí)現(xiàn)特定的功能。
以下是這個(gè)項(xiàng)目的一些要求和全部源碼。
一、軟件開(kāi)發(fā)目的
該軟件主要是使用C語(yǔ)言設(shè)計(jì)開(kāi)發(fā)一個(gè)簡(jiǎn)單的車(chē)輛租賃管理系統(tǒng),實(shí)現(xiàn)租賃信息的查詢(xún)、修改、刪除、添加以及訂單的查詢(xún)等功能。
二、數(shù)據(jù)結(jié)構(gòu)
程序中采用結(jié)構(gòu)體數(shù)組存儲(chǔ)租賃信息。租賃結(jié)構(gòu)體成員包括:訂單號(hào)、車(chē)牌號(hào)、費(fèi)用。數(shù)組的長(zhǎng)度不超過(guò)100。
三、軟件功能說(shuō)明
1.租賃信息的錄入和保存:
輸入租賃信息包括:訂單號(hào)、終止、車(chē)牌號(hào)、費(fèi)用。還車(chē)前費(fèi)用為0。在錄入數(shù)據(jù)的同時(shí),系統(tǒng)將對(duì)信息的合法性進(jìn)行檢驗(yàn),若錄入了不合法的數(shù)據(jù)系統(tǒng)應(yīng)作出提示,并且要求重新輸入。
2.顯示單條租賃信息:
將租賃信息在屏幕上列表輸出。要求先顯示提示信息“訂單號(hào)、終止、車(chē)牌號(hào)、費(fèi)用”,然后再顯示租賃信息,每行顯示一條租賃信息。
3.查詢(xún)單條租賃信息
輸入終止進(jìn)行查詢(xún),輸出符合條件的租賃信息,輸出訂單號(hào)、終止、車(chē)牌號(hào)、費(fèi)用。
4.查詢(xún)每輛車(chē)的租賃費(fèi)用:
輸入車(chē)牌號(hào)進(jìn)行查詢(xún),輸出該車(chē)所有租賃的總費(fèi)用。輸出車(chē)牌號(hào)、總費(fèi)用。
5.添加租賃信息
輸入新的租賃信息,將新的信息插原租賃信息清單中,并將新的列表輸出,以方便用戶(hù)確認(rèn)。
6.修改、刪除租賃信息
通過(guò)終止對(duì)某條租賃信息進(jìn)行進(jìn)行修改和刪除,并將租賃信息列表輸出,以方便用戶(hù)確認(rèn)。
7.統(tǒng)計(jì):
(1)統(tǒng)計(jì)輸出當(dāng)月訂單總金額
(2)統(tǒng)計(jì)輸出訂單金額最高的車(chē)牌號(hào)
8.退出系統(tǒng),結(jié)束任務(wù)。
以下是該程序的全部代碼
#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 };/*定義結(jié)構(gòu)體變量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("歡迎使用汽車(chē)租賃管理系統(tǒng)");
gotoxy(40,15);
printf("[1]信息錄入");
gotoxy(40,16);
printf("[2]信息顯示");
gotoxy(40,17);
printf("[3]查詢(xún)信息");
gotoxy(40,18);
printf("[4]修改信息");
gotoxy(40,19);
printf("[5]刪除信息");
gotoxy(40,20);
printf("[6]追加信息");
gotoxy(40,21);
printf("[7]統(tǒng)計(jì)信息");
gotoxy(40,22);
printf("[8]退出");
gotoxy(40,26);
printf("Zenith 版權(quán)所有");
gotoxy(40,23);
printf("請(qǐng)選擇(1-8):");
scanf("%d",&choose);
while(choose<1 || choose>8){
printf("請(qǐng)輸入范圍為1-8的整數(shù)");
gotoxy(40,23);
printf("請(qǐng)選擇(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("歡迎使用汽車(chē)租賃管理系統(tǒng)");
gotoxy(40,15);
printf("[1]按照身份證號(hào)檢索");
gotoxy(40,16);
printf("[2]按照車(chē)牌號(hào)檢索");
gotoxy(40,17);
printf("[3]返回主菜單");
gotoxy(40,18);
printf("[4]退出系統(tǒng)");
gotoxy(40,26);
printf("Zenith 版權(quán)所有");
gotoxy(40,23);
printf("請(qǐng)選擇(1-4):");
scanf("%d",&choose);
while(choose<1 || choose>8){
printf("請(qǐng)輸入范圍為1-4的整數(shù)");
gotoxy(40,23);
printf("請(qǐng)選擇(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("歡迎使用汽車(chē)租賃管理系統(tǒng)");
gotoxy(40,15);
printf("[1]查看車(chē)輛總收入");
gotoxy(40,16);
printf("[2]查看盈利車(chē)輛");
gotoxy(40,17);
printf("[3]返回主菜單");
gotoxy(40,18);
printf("[4]退出系統(tǒng)");
gotoxy(40,26);
printf("Zenith 版權(quán)所有");
gotoxy(40,23);
printf("請(qǐng)選擇(1-4):");
scanf("%d",&choose);
while(choose<1 || choose>8){
printf("請(qǐng)輸入范圍為1-4的整數(shù)");
gotoxy(40,23);
printf("請(qǐng)選擇(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); //清空緩沖區(qū)
printf("請(qǐng)輸入訂單號(hào)(1-999999):");
scanf("%d", &x);
while( x<1 || x>100){
printf("訂單號(hào)范圍為1~100:");
scanf("%d", &x);
}
one=0;
for(j=0;j < loop;j++){
if(x==car[j].theOrderNumber){
one=1;
printf("\n記錄中已有!不得重復(fù)添加...");
getch();
system("cls");
menu();
}
}
if(one==0){
car[loop].theOrderNumber = x;
}
printf("請(qǐng)輸入身份證號(hào):");
getchar();
gets(car[loop].IdNumber);
printf("請(qǐng)輸入車(chē)牌號(hào):");
scanf("%s",&car[loop].PlateNumber);
printf("請(qǐng)輸入費(fèi)用:");
scanf("%lf", &cost);
car[loop].Cost = cost;
loop++;
printf("\n添加完畢! 目前共有%d輛車(chē)!\n按1回到主界面!按2繼續(xù)添加信息!按其他鍵退出程序! ",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,無(wú)數(shù)據(jù),請(qǐng)?zhí)砑訑?shù)據(jù)后再試\n");
}
else{
gotoxy(3,5);
printf("訂單號(hào)");
gotoxy(10,5);
printf("身份證號(hào)");
gotoxy(32,5);
printf("車(chē)牌號(hào)");
gotoxy(45,5);
printf("費(fèi)用");
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輛車(chē)!\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 ———查詢(xún)(按照身份證號(hào))———\n\n");
if(loop == 0){
gotoxy(3,5);
printf("無(wú)數(shù)據(jù),請(qǐng)錄入數(shù)據(jù)后查詢(xún),輸入任意鍵返回主菜單");
getch();
system("cls");
main();
}
gotoxy(3,5);
printf("請(qǐng)輸入需要查詢(xún)的身份證號(hào):");
scanf("%s",&idnumber);
j = 0;
for(i=0;i < loop;i++){
if(strcmp(idnumber,car[i].IdNumber) == 0){
j=1;
gotoxy(3,7);
printf("訂單號(hào)");
gotoxy(10,7);
printf("身份證號(hào)");
gotoxy(32,7);
printf("車(chē)牌號(hào)");
gotoxy(45,7);
printf("費(fèi)用");
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("對(duì)不起,未查詢(xún)到您輸入的身份證號(hào),請(qǐng)核實(shí)后重新輸入");
break;
}
}
gotoxy(3,11);
printf("查詢(xún)完成,輸入1繼續(xù)查詢(xún),輸入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 ———查詢(xún)(按照車(chē)牌號(hào))———\n\n");
if(loop == 0){
gotoxy(3,5);
printf("無(wú)數(shù)據(jù),請(qǐng)錄入數(shù)據(jù)后查詢(xún),輸入任意鍵返回主菜單");
getch();
system("cls");
main();
}
gotoxy(3,5);
printf("請(qǐng)輸入需要查詢(xún)的車(chē)牌號(hào):");
scanf("%s",&platenumber);
j = 0;
for(i=0;i < loop;i++){
if(strcmp(platenumber,car[i].PlateNumber) == 0){
j=1;
gotoxy(3,7);
printf("訂單號(hào)");
gotoxy(10,7);
printf("身份證號(hào)");
gotoxy(32,7);
printf("車(chē)牌號(hào)");
gotoxy(45,7);
printf("費(fèi)用");
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("對(duì)不起,未查詢(xún)到您輸入的車(chē)牌號(hào),請(qǐng)核實(shí)后重新輸入");
break;
}
}
gotoxy(3,11);
printf("查詢(xún)完成,輸入1繼續(xù)查詢(xún),輸入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("無(wú)數(shù)據(jù),請(qǐng)錄入數(shù)據(jù)后查詢(xún),輸入任意鍵返回主菜單");
getch();
system("cls");
main();
}
gotoxy(3,5);
printf("請(qǐng)輸入需要修改的信息的身份證號(hào):");
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("訂單號(hào)");
gotoxy(10,7);
printf("身份證號(hào)");
gotoxy(32,7);
printf("車(chē)牌號(hào)");
gotoxy(45,7);
printf("費(fèi)用");
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("請(qǐng)選擇需要修改的項(xiàng)目\n");
printf("\t[1]身份證號(hào)\n");
printf("\t[2]車(chē)牌號(hào)\n");
printf("\t[3]費(fèi)用\n");
scanf("%d",&b);
switch(b){
case 1:
printf("\n請(qǐng)輸入身份證號(hào):");
getchar();
gets(car[i].IdNumber);
break;
case 2:
printf("\n請(qǐng)輸入車(chē)牌號(hào):");
scanf("%s",&car[i].PlateNumber);
break;
case 3:
printf("請(qǐng)輸入費(fèi)用:");
scanf("%lf", &cost);
car[i].Cost = cost;
break;
}
printf("修改完成,輸入1繼續(xù)修改,輸入其他鍵結(jié)束對(duì)此條目的修改");
scanf("%d",&c);
}while(c == 1);
break;
}
if(j == 0){
gotoxy(3,7);
printf("對(duì)不起,未查詢(xún)到您輸入的身份證號(hào),請(qǐng)核實(shí)后重新輸入");
break;
}
}
gotoxy(3,15);
printf("輸入1繼續(xù)修改其他條目,輸入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 請(qǐng)輸入需要?jiǎng)h除的條目的身份證號(hào):");
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 對(duì)不起,記錄中沒(méi)有此條目...");
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("請(qǐng)?jiān)阡浫胄畔⒑筮x擇此功能,按任意鍵退出!");
getch();
loop--;
system("cls");
main();
}
printf("請(qǐng)輸入在第幾行增添數(shù)據(jù)");
scanf("%d",&row);
if(row >= loop){
do{
printf("輸入的行數(shù)必須小于已有的條目數(shù)!請(qǐng)重新輸入:");
scanf("%d",&row);
}while(row<=loop);
}
for(i = loop;i >= row;i--){
car[i] = car[i - 1];
}
printf("請(qǐng)輸入訂單號(hào)(1-100):");
scanf("%d", &x);
while( x<1 || x>100){
printf("訂單號(hào)范圍為1~100:");
scanf("%d", &x);
}
one=0;
for(j=0;j < loop;j++){
if(x==car[j].theOrderNumber){
one=1;
printf("\n記錄中已有!不得重復(fù)添加...");
getch();
system("cls");
main();
}
}
if(one==0){
car[row].theOrderNumber = x;
}
printf("請(qǐng)輸入身份證號(hào):");
getchar();
gets(car[row].IdNumber);
printf("請(qǐng)輸入車(chē)牌號(hào):");
scanf("%s",&car[row].PlateNumber);
printf("請(qǐng)輸入費(fèi)用:");
scanf("%lf", &cost);
car[row].Cost = cost;
printf("\n\t追加完成,請(qǐng)按任意鍵返回主菜單");
getch();
system("cls");
main();
}
void MoneySum(){
int i;
double sum = 0;
system("cls");
printf("\n----------------------------------------------------\n");
printf("\t ———信息統(tǒng)計(jì)(車(chē)輛總收入)———\n\n");
for(i = 0;i <= loop ; i++){
sum = sum + car[i].Cost;
}
gotoxy(3,5);
printf("截至目前所有車(chē)輛總收入為%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 ———信息統(tǒng)計(jì)(盈利車(chē)輛)———\n\n");
for(i = 0;i < loop;i++){
if(car[i].Cost >= high){
high = car[i].Cost;
j = i;
}
}
gotoxy(3,5);
printf("截止目前盈利車(chē)輛為收入%lf元的%s",high,car[j].PlateNumber);
gotoxy(3,6);
printf("按任意鍵返回主菜單");
getch();
system("cls");
main();
}
void ExitSystem(){
system("cls");
printf("\n退出系統(tǒng)中...");
Sleep(1000);
exit(0);
} 以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C++中用new創(chuàng)建二維數(shù)組和指針數(shù)組實(shí)例代碼
這篇文章主要介紹了C++中用new創(chuàng)建二維數(shù)組和指針數(shù)組實(shí)例代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下2017-03-03
關(guān)于vector迭代器失效的幾種情況總結(jié)
下面小編就為大家?guī)?lái)一篇關(guān)于vector迭代器失效的幾種情況總結(jié)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12
C語(yǔ)言實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(單鏈表)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
C++實(shí)現(xiàn)LeetCode(68.文本左右對(duì)齊)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(68.文本左右對(duì)齊),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
C語(yǔ)言堆與二叉樹(shù)的順序結(jié)構(gòu)與實(shí)現(xiàn)
堆是計(jì)算機(jī)科學(xué)中一類(lèi)特殊的數(shù)據(jù)結(jié)構(gòu)的統(tǒng)稱(chēng),通常是一個(gè)可以被看做一棵完全二叉樹(shù)的數(shù)組對(duì)象。而堆排序是利用堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計(jì)的一種排序算法。本文將詳細(xì)介紹堆與二叉樹(shù)的順序結(jié)構(gòu)與實(shí)現(xiàn),需要的可以參考一下2022-05-05
OpenCV?直方圖均衡化的實(shí)現(xiàn)原理解析
直方圖均衡化是通過(guò)拉伸像素強(qiáng)度分布范圍來(lái)增強(qiáng)圖像對(duì)比度的一種方法,今天通過(guò)本文給大家介紹OpenCV?直方圖均衡化的實(shí)現(xiàn)原理解析,感興趣的朋友跟隨小編一起看看吧2022-01-01

