【问题描述】
汽车租赁公司拥有若干种不同类别的汽车,允许持有相应类别驾照的顾客租赁汽车,按照租赁的汽车类型和租赁的时间进行收费,租赁最长时间不能超过一周;若延迟归还,则按延迟的时间进行罚金处理。
其中,汽车信息包括:汽车编号、类别、收费标准、库存数量、延迟归还罚金标准;(汽车类别分为A、B、C三类,收费标准每天分别为:400、300、200元,延迟归还的罚金标准分别为:每天600、500、400元。)
顾客租赁信息包括:顾客编号、顾客名、驾照类别(A、B、C三类)、租赁的汽车编号、租赁天数、延迟归还的天数)。
主要用到的知识点有:结构体、线性表、函数
【基本要求】 设计一个汽车租赁管理系统,能够完成以下功能:
查询并显示汽车信息、顾客的租赁信息
顾客租赁汽车:首先检查顾客驾照类别,然后查询相应类别的汽车数量,若可租赁,则添加顾客信息、同时修改汽车库存量。
顾客归还汽车:首先检查归还日期并计算费用,然后删除该顾客的租赁信息表、修改汽车库存量。
系统以菜单的方式工作:运行界面可选择要执行的 *** 作是查询?租赁还是归还?
【测试数据】由读者自行设定
编译器是VC6
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MaxNum 20
typedef struct A{
int No/*车辆编号*/
char Type/*车类型*/
int Payment/*租费*/
int fine/*罚金*/
struct A *next/*指向下一个结点*/
} car
typedef struct B{
int No/*顾客编号*/
char Name[20]/*顾客姓名*/
char License/*执照类别*/
int carNo/*租凭的车辆编号*/
int Day/*租的天数*/
int DelayDay/*延迟的天数*/
struct B *next
} client
struct C{/*这个结构体是车辆链表的头结点,A,B,C每种类型有一种*/
char Type/*车辆型号*/
int avl/*可用数*/
car *head/*指向车辆结点*/
} headNode[3]={{'A',MaxNum,NULL},{'B',MaxNum,NULL},{'C',MaxNum,NULL}}
client *allClien=NULL
int pay[3]={400,300,200},fine[3]={600,500,400}
void init()/*初始化*/
int menu()/*简单菜单界面*/
void search()/*查询*/
void carSc()/*查询车辆*/
void clientSc()/*查询顾客*/
void rent()/*租车*/
void giveback()/*还车*/
void addCli(client *cli)/*向顾客链表增加顾客*/
client* delCli(int clientNo)/*从顾客链表删除一个顾客*/
void addCar()/*向车辆链表归还车辆*/
car* delCar()/*从车辆链表拿出一辆车*/
void Exit()/*退出*/
void main()
{
init()
while(1)
{
switch(menu())
{
case 1:search()break
case 2:rent()break
case 3:giveback()break
case 4:Exit()
default:
}
}
}
void init()
{
int i
car *ptr,*pa=headNode[0].head,*pb=headNode[1].head,*pc=headNode[2].head
for(i=1i<=MaxNumi++)
{
ptr=(car *)malloc(sizeof(car))
ptr->No=100+i
ptr->Type='A'
ptr->Payment=400
ptr->fine=600
pa=ptr
pa=ptr->next
ptr=ptr=(car *)malloc(sizeof(car))
ptr->No=200+i
ptr->Type='B'
ptr->Payment=300
ptr->fine=500
pb=ptr
pb=ptr->next
ptr=(car *)malloc(sizeof(car))
ptr->No=300+i
ptr->Type='C'
ptr->Payment=200
ptr->fine=400
pc=ptr
pc=ptr->next
}
pa=NULLpb=NULLpc=NULL
}
int menu()
{
int choice
printf("\n\n\n选择服务:1.查询 2.租车 3.归还 4.退出\n")
scanf("%d",&choice)
while(choice!=1&&choice!=2&&choice!=3&&choice!=4)
{
printf("\n输入有误,重新输入:")
scanf("%d",&choice)
}
return choice
}
void search()
{
int choice
printf("\n你想查询:1.汽车 2.顾客 3.返回 \n")
scanf("%d",&choice)
while(choice!=1&&choice!=2&&choice!=3)
{
printf("\n输入有误,重新输入:")
scanf("%d",&choice)
}
switch(choice)
{
case 1:carSc()break
case 2:clientSc()break
case 3:
default:
}
}
void carSc()
{
printf("\n\n所有汽车信息:\n")
printf("\nA类汽车还剩%d辆.\nB类汽车还剩%d辆.\nC类汽车还剩%d辆.",
headNode[0].avl,headNode[1].avl,headNode[2].avl)
}
void clientSc()
{
client *ptr=allClien
printf("\n\n所有顾客信息:\n")
while(ptr!=NULL)
{ printf("\n\n顾客编号:%d",ptr->No)
printf("\n顾客姓名:%s",ptr->Name)
printf("\n驾照类型:%c",ptr->License)
printf("\n租赁车号:%d",ptr->carNo)
printf("\n租赁天数:%d",ptr->Day)
printf("\n延迟天数:%d",ptr->DelayDay)
ptr=ptr->next
}
}
void addCli(client *cli)
{
if(allClien)
allClien=cli
else
{
cli->next=allClien->next
allClien=cli
}
}
client* delCli(int clientNo)
{
client *ptr,*prePtr
ptr=allClien
while(ptr!=NULL&&ptr->No!=clientNo)
{ prePtr=ptr
ptr=ptr->next
}
if(ptr!=NULL)
{
if(ptr==allClien)
{
allClien=NULL
}
else
{
prePtr->next=ptr->next
}
}
return ptr
}
void rent()
{
char name[20],type,Yes_No
int num,day,No
car *carPtr
client *cli
printf("\n\n输入执照类型(A/B/C):")
scanf("%c",&type)
while(type!='A'&&type!='B'&&type!='C')
{
printf("输入有误,重新输入:")
scanf("%c",&type)
}
if(type=='A')
num=headNode[0].avl
else if(type=='B')
num=headNode[1].avl
else
num=headNode[2].avl
printf("\n%c类汽车还剩%d辆,是否要租凭(Y/N):",type,num)
scanf("%c",&Yes_No)
while(Yes_No!='Y'&&Yes_No!='N'&&Yes_No!='y'&&Yes_No!='n')
{
printf("Y或N:")
scanf("%c",&Yes_No)
}
/*增加顾客*/
if(Yes_No=='Y'||Yes_No=='y')
{
printf("\n输入你的名字:")
scanf("%s",name)
printf("\n输入你的租赁天数:")
scanf("%d",&day)
}
No=rand()%60+200
carPtr=delCar(type)
cli=(client *)malloc(sizeof(client))
cli->No=No
strcpy(cli->Name,name)
cli->License=type
cli->carNo=carPtr->No
cli->Day=day
cli->DelayDay=0
cli->next=NULL
addCli(cli)
/*移出一辆车*/
printf("\n你的顾客编号是:%d",No)
printf("\n你所租赁的汽车是%c类车,车号是:%d",type,carPtr->No)
printf("\n你的租赁天数是%d天.",day)
}
void giveback()
{
int No
long int payment
client *ptr
printf("\n\n顾客编号:")
scanf("%d",&No)
if((ptr=delCli(No))==NULL)
printf("\n该顾客不存在,无法归还!")
else
{
switch(ptr->License)
{
case 1:payment=ptr->Day*400+ptr->DelayDay*600break
case 2:payment=ptr->Day*300+ptr->DelayDay*500break
case 3:payment=ptr->Day*200+ptr->DelayDay*400break
default:
}
printf("\n\n顾客姓名:%s",ptr->Name)
printf("\n驾照类型:%c",ptr->License)
printf("\n租赁车号:%d",ptr->carNo)
printf("\n租赁天数:%d",ptr->Day)
printf("\n延迟天数:%d",ptr->DelayDay)
printf("\n\n所需费用:%ld",payment)
addCar(ptr->License,ptr->carNo)
free(ptr)
}
}
void addCar(char carType,int carNo)
{
car *ptr
int index=carType-65
ptr=headNode[index].head
if(ptr==NULL)
{ptr=(car *)malloc(sizeof(car))
headNode[index].head=ptr
}
else
{while(ptr->next)
ptr=ptr->next
ptr->next=(car *)malloc(sizeof(car))
ptr=ptr->next
}
ptr->No=carNo
ptr->Type=carType
ptr->Payment= pay[index]
ptr->fine=fine[index]
ptr->next=NULL
}
car* delCar(char type)
{
car *rentcar
switch(type)
{
case 'A':rentcar=headNode[0].head
headNode[0].head=rentcar->next
break
case 'B':rentcar=headNode[1].head
headNode[1].head=rentcar->next
break
case 'C':rentcar=headNode[2].head
headNode[2].head=rentcar->next
break
default:
}
return rentcar
}
void Exit()
{
printf("\n欢迎使用.....888888888886666....")
exit(0)
}
粘的有点乱,凑合看吧。毕业论文(设计)开题报告 论文题目 学生管理系统设计与实现
学生姓名 学 号 专 业 指导教师 职 称 学 历 开题报告文献综述)内容: 一、开发背景 学校学生信息管理是学校教务管理中的一个极为重要的环节,它是整个学校管理的核心和基础。现在我国的大中小学校档案的管理水平还停留在纸介质的基础上,这样的机智已经不能适应时代的发展,因为它浪费了许多人力和物力,在信息时代这种传统的管理方法必然被以计算机为基础的信息管理所取代。信息社会的高科技,商品经济化的高效益,使计算机的应用已普及到经济和社会生活的各个领域。计算机已经成为我们学习和工作的得力助手:今天,计算机的价格已经十分低廉,性能却有了长足的进步。它已经被应用于许多领域,计算机之所以如此流行的原因主要有以下几个方面:首先,计算机可以代替人工进行许多繁杂的劳动;其次,计算机可以节省许多资源;第三,计算机可以大大的提高人们的工作效率;第四,计算机可以使敏感文档更加安全,等等。为了适应现代社会人们高度强烈的时间观念,学籍管理系统软件将会为教学办公室带来极大的方便。随着学校的规模不断扩大,学生数量急剧增加,有关学生的各种信息量也成倍增长。 二、选题的意义 通过学生管理系统,可以做到信息的规范管理,科学统计和快速的查询,从而减少管理方面的工作量。毋庸置疑,切实有效地把计算机管理引入学校教务管理中,对于促进学校管理制度,提高学校教学质量与办学水平有着显著意义。 三.系统研究内容 此学生信息管理系统需要完成的功能主要有: ● 有关学籍信息的输入,包括学生基本信息、所在班级、所学课程和成绩等. ● 学生信息的查询,包括学生基本信息、所在班级、已学课程和成绩等. ● 学生信息的修改. ● 班级管理信息的输入,包括班级设置、年级信息等. ● 班级管理信息的查询. ● 班级管理信息的修改 ● 学校基本课程信息的输入. ● 学校课程信息的修改.
● 学校课程的设置和修改. ● 学生成绩的输入. ● 学生成绩信息的修改 ● 学生信息的查询. ● 学生信息的统计. 四、毕业设计思路框架(一)设计方法 1.查询相关资料,了解本系统的研究意义。可以上网搜索或者是去图书馆查阅相关资料。 2.通过查询资料了解该系统要如何做,及要做哪些东西。 3.设计出大体上的功能模块,画出模块图。 4.通过进一步的了解,对每个功能模块进行细化,将每一步都想清楚。制定出每一步的做法和注意的地方。 5.对设计好的程序进行调试,通过调试发现存在的问题并解决,从而达到完善系统的目的。 6.最后,整理各阶段的设计记录文档,写成论文稿。 开发工具开发工具开发工具开发工具 选用设计语言 目前的可用的设计技术在设计此类系统上的数据库技术已经非常成熟,可提供的开发工具也很多,例如:Visual C++ ,Visual Basic,PowerBuilder,Dephi, visual foxpro等,它们都是很好的数据库开发工具,都是可视化开发工具,功能强大,开发容易,开发周期短,对于本任务都能够胜任。 Visual Basic是一种可视化的、面对对象和条用事件驱动方式的结构化高级程序设计,可用于开发Windows环境下的种类应用程序。它简单易学、效率高,且功能强大,可以与Windows的专业开发工具SDK相媲美,而且程序开发人员不必具有C/C++编程基础。在Visual Basic环境下,利用事件驱动的编程机制、新颖易用的可视化设计工具,使用Windows内部的应用程序接口(API)函数,以及动态链接库(DLL)、动态数据交换(DDE)、对象的链接与嵌入(OLE)、开放式数据访问(ODBC)等技术,可以高效、快速地开发出Windows环境下功能强大、图形界面丰富的应用软件系统。
总的来说,Visual Basic具有以下特点: 可视化编程: 用传统程序设计语言设计程序时,都是通过编写程序代码来设计用户界面,在设计过程中看不到界面的实际显示效果,必须编译后运行程序才能观察。如果对界面的效果不满意,还要回到程序中修改。有时候,这种编程-编译-修改的 *** 作可能要反复多次,大大影响了软件开发效率。Visual Basic提供了可视化设计工具,把Windows界面设计的复杂性“封装”起来,开发人员不必为界面设计而编写大量程序代码。只需要按设计要求的屏幕布局,用系统提供的工具,在屏幕上画出各种“部件”,即图形对象,并设置这些图形对象的属性。Visual Basic自动产生界面设计代码,程序设计人员只需要编写实现程序功能的那部分代码,从而可以大大提高程序设计的效率。 面向对象的程序设计 4.0版以后的Visual Basic支持面向对象的程序设计,但它与一般的面向对象的程序设计语言(C++)不完全相同。在一般的面向对象程序设计语言中,对象由程序代码和数据组成,是抽象的概念;而Visual Basic则是应用面向对象的程序设计方法(OOP),把程序和数据封装起来作为一个对象,并为每个对象赋予应有的属性,使对象成为实在的东西。在设计对象时,不必编写建立和描述每个对象的程序代码,而是用工具画在界面上,Visual Basic自动生成对象的程序代码并封装起来。每个对象以图形方式显示在界面上,都是可视的。 结构化程序设计语言 Visual Basic是在BASIC语言的基础上发展起来的,具有高级程序设计语言的语句结构,接近于自然语言和人类的逻辑思维方式。Visual Basic语句简单易懂,其编辑器支持彩色代码,可自动进行语法错误检查,同时具有功能强大且使用灵活的调试器和编译器。 Visual Basic是解释型语言,在输入代码的同时,解释系统将高级语言分解翻译成计算机可以识别的机器指令,并判断每个语句的语法错误。在设计Visual Basic程序的过程中,随时可以运行程序,而在整个程序设计好之后,可以编译生成可执行文件(.EXE),脱离Visual Basic环境,直接在Windows环境下运行。 5.2选用ACCESS作为后台数据库 ACCESS2000 就是关系数据库管理工具,数据库能汇集各种信息以供查询、存储和检索。ACCESS 的优点在于它能使用数据表示图或自定义窗体收集信息。数据表示图提供了一种类似于 Excel的电子表格,可以使数据库一目了然。另外,ACCESS允许创建自定义
报表用于打印或输出数据库中的信息。ACCESS也提供了数据存储库,可以使用桌面数据库文件把数据文件置于网络文件服务器,与其他网络用户共享数据库。ACCESS 是一种关系数据库管理工具,关系数据库是已开发的最通用的数据库之一。如上所述,ACCESS 作为关系数据库开发具备了许多优点,可以在一个数据包中同时拥有桌面数据库的便利和关系数据库的强大功能。 (三)设计要求 数据库相关理论。汽车租赁管理是一个典型的数据库管理信息系统,系统的开发用到许多数据库相关的理论,因此要求作者具有这方面的基础知识,能够正确运用数据库理论进行系统的分析、逻辑设计、实体属性以及ER图等的转换,明白范式的相关内容,从而能够根据系统实际要求,设计出满足要求的合理的数据库。 面向对象理论。当前流行的编程思想是面向对象思想,而且许多工具,如Visual Basic,体现的也正是这种思想。面向对象思想与传统的面向过程编程思想相比,具有明显的优势,而且汽车租赁系统的设计也要求用面向对象编程工具来实现。这就要求作者在进行毕业设计时,应该明白面向对象的思想,并能够运用其思想到实际的工作中。 软件工程思想。大型系统的开发要用到软件工程相关的理论。虽然汽车租赁系统比较小,但是最好也能按照系统设计的生命周期模型来进行。严格按照软件工程思想和管理信息系统的开发步骤,设计并实现一个汽车租赁管理信息系统。以系统开发过程为主线,从需求分析,逻辑设计,总体设计,详细设计以及系统测试、实施各阶段的主要内容和成果,包括系统结构图、业务流程图、数据流程图、E-R模型、数据字典、物理表实现及其关系、功能模块算法流程、界面设计等等。 一定的实际动手能力和实际编程经验。系统最后要落实到windows下的编程,因此要求作者对windows下的数据库编程具有一定的基础,能够较为熟练的进行数据库相关程序的开发。以Microsoft公司的Visual Basic 6.0为开发工具,以ACCESS为后台数据库,对上述逻辑设计的成果进行转换,实现一个完整的可运行的汽车租赁管理系统。 (四)设计环境 硬件环境 随着计算机硬件的高速发展,现在普通的机子已经可以做为一个服务器端使用。 CPU:CⅣ 2.0或更高 硬盘:40G或更多 内存:128M或更高(建议使用256M)
软件环境软件环境软件环境软件环境 *** 作系统 Windows 2000 Server /Windows XP 网络协议 TCP/IP 数据库 ACCESS 开发语言 VB 其它辅助软件:Microsoft Word等 四、参考文献 [1] 丁宝康:《数据库实用教程》, 清华大学出版社,2004年。 [2] 赛奎春等:《VB数据库开发关键技术与实例应用》,人民邮电出版社,2003年。 [3] 汪诗林等:《数据结构算法与应用》,机械工业出版社,2005年。 [4] 罗征等:《VB 6.0从入门到精通》,电子工业出版社,2004年。 [5] 冯博琴等:《面向对象分析与设计》,机械工业出版社,2003年。 [6] Awad.E.M, Gotterer M.H: Visual Basic 6.0, 1992. [7] Robert.H.Dependahl:《Database Principles and Applications》.Williams Brown,2003. 报告人签名: 年月
指导教师对开题报告指导教师对开题报告指导教师对开题报告((((文献综述文献综述文献综述文献综述))))的评语的评语的评语的评语:::: 指导教师签名:年 月
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)