UML课程设计报告 汽车租赁系统的需求分析与设计

 

课程设计报告

  2009    20##    学年      第二学期

教 学 单 位     信息工程与技术系       

课 程 名 称     UML统一建模语言课程设计

课程设计题目汽车租赁系统的需求分析与设计

指 导 教 师         XXXX              

学 生 姓 名         XXXXX            

专 业 名 称   计算机科学与技术(数据库)

年       级          08级              

汽车租赁系统的需求分析与设计

一. 课程设计目的

    UML统一建模课程是一门面向对象开发方法的设计语言。UML统一建模课程设计实验课,着重加强面向对象建模技术。使用UML统一建模语言,用需求模型简化业务领域;用分析模型验证用例的正确性,一致性,完备性,可行性;用设计模型标识解决方案。通过模型实现了从业务领域到软件领域的映射。通过建模,使问题可视化,形式化。通过一序列的建模和迭代活动,对于提高学生综合素质十分必要。

 UML统一建模课程是本科类计算机专业的一门骨干课程,技术复杂,应用范围广。本课程设计实验主要内容:构建系统的分析模型、设计模型。主要目标如下:

1. 掌握面向对象的分析技术、设计技术;

2. 构建“汽车租赁系统”的需求分析模型和设计模型;

二.  课程设计题目描述和要求 

       本课程设计中包含:

A.    软件需求分析

B.    汽车租赁系统的需求分析

C.    系统的UML基本模型

D.    系统中的类

E.    系统的配置与实现

1、系统目标

        系统的整体目标是:利用互联网和信息化技术,结合汽车租赁经营的实际运作情况,建设一个覆盖汽车租赁经营全部业务的“汽车租赁系统”,通过该系统提高企业信息化水平,完善经营管理体系,提高员工素质,进一步加强企业市场竞争能力。

2、功能要求

“汽车租赁系统”中的功能需求可以包括以下几个方面:

l  客户可以通过不同的方式(包括电话、前台、网上)预订车辆;

l  能够保存客户的预订申请单;

l  能够保存客户的历史记录;

l  工作人员可以处理客户申请;

l  技术人员可以保存对车辆检修的结果。

满足上述需求的系统主要包括以下几个模块:

l  基本数据维护模块:该模块提供了使用者录入、修改并维护基本数据的途径。

l  基本业务模块:在系统中,客户可以填写汽车租赁申请表,工作人员处理这些表格;同时,技术人员还可以提交每辆车的状态,以便工作人员根据这些资料决定是否批准客户的请求。

l  数据库管理模块:在系统中,对所有客户、工作人员以及车辆的信息都要进行统一管理,车辆的租赁情况也要进行详细的登记。

l  信息查询模块:该模块主要用于查询相关信息。

三.课程设计报告内容

1. 汽车租赁系统的需求分析

1.1 系统功能需求

系统的功能需求主要包括以下几个方面:

l        客户可以通过不同的方式(包括电话、前台、网上)预订车辆。

l        能够保存客户的预订申请单。

l        能够保存客户的历史记录。

l        工作人员可以处理客户申请。

l        技术人员可以保存对车辆检修的结果。

满足上述需求的系统主要包括以下模块:

n           基本数据维护模块

n           基本业务模块

n           数据库管理模块

n           信息查询模块

1.2    基本数据维护模块

基本数据维护模块包括的主要功能模块:

l        添加车辆信息

l        修改车辆信息

l        添加员工信息

l        修改员工数据

1.3    基本业务模块

基本业务模块包含的功能:

l        用户填写预定申请

l        工作人员处理预定请求

l        技术人员填写服务记录

l        工作人员处理还车

1.4    数据库模块

 数据库模块的功能:

l        客户信息管理

l        车辆信息管理

l        租赁信息管理

l        职员信息管理

1.5    信息查询模块

信息查询模块是查询数据库中的相关信息,包括:

l        查询客户信息

l        查询职员信息

l        查询车辆信息

l        查询客户记录

2. 系统的UML基本模型

2.1  系统的用例图

n   创建用例图之前首先需要确定参与者。

n   系统中的参与者主要有两类:

²   客户

²   公司职员

1.  客户参与的用例图

2.  公司职员参与的用例图

2.2  系统的顺序图

1.  管理人员开展工作的顺序图

2.  客户预订车辆的顺序图

3.  客户取车的顺序图

4.  客户还车的顺序图

 

 2.3  系统的协作图

1.  客户预订的协作图

2.  客户取车的协作图

3.  客户还车的协作图

 

2.4  系统的状态图

2.5  系统的活动图

系统中的类

3.1  系统中主要的类

1.客户和公司职员类

2.一些其他的类

3.2  各个类之间的关系

 

系统的配置与实现

系统的配置图

四.小结

汽车租赁系统是一套针对汽车租赁业务的实际特点而开发的应用与管理软件,其功能覆盖了汽车租赁业务的全部流程。主要包括车辆预订、租赁业务、车辆管理、客户管理、车辆检修、租金统计等功能。它包括了四个模块:基本数据维护模块、基本业务模块、数据库管理模块和信息查询模块。其中,基本数据维护模块提供了使用者录入、修改并维护基本数据的途径,主要包括了添加车辆信息、修改车辆信息 添加员工信息、修改员工数据几大主要功能。基本业务模块则提供客户可以填写汽车租赁的申请表,工作人员会处理这些表格;同时,技术人员还可以提供每辆车的状态,以便工作人员根据这些资料决定是否批准客户的请求,它包含的功能有:用户填写预定申请、工作人员处理预定请求、技术人员填写服务记录和工作人员处理还车。数据库模块是对所有客户、工作人员以及车辆的信息都要进行统一管理,车辆的租赁情况也要进行详细的登记,它的功能则是客户信息管理、车辆信息管理、租赁信息管理和职员信息管理。信息查询模块是查询数据库中的相关信息,包括查询客户信息、查询职员信息、查询车辆信息和查询客户记录。

通过这一个课程设计中,我学会了不少东西。最大的收获就是知道了如何进行UML统一建模,掌握了面向对象UML统一建模语言。我了解了使用UML统一建模语言,用需求模型简化业务领域;用分析模型验证用例的正确性,一致性,完备性,可行性;用设计模型标识解决方案。我还认识到通过模型可以实现从业务领域到软件领域的映射;通过建模,可以使问题可视化,形式化。而通过一序列的建模活动,提高了我在系统设计上的能力,增长了分析、解决问题的经验,对UML统一建模语言有了更深的了解。可以说,这次设计既锻炼了我的动脑分析问题的能力,又锻炼了我动手解决实际问题的能力,这将在我以后的学习中起到很大的作用。我会运用从中学到的宝贵经验来指导我今后的学习和工作,不断地实践,不断地学习,让自己变得更加的充实,更适合社会的需要。

参考书目:

[1] 徐峰,陈暄,UML面向对象建模基础,中国水利水电出版社,2008

[2] 王先国,方鹏,曾碧卿,刘烨,UML统一建模实用教程,清华大学出版社,2009

[3]  王养廷,李磊,宋汉珍,UML基础与应用,清华大学出版社,2006

课程设计成绩评定表

 

第二篇:算法设计与分析课程设计报告(五子棋)

西 安 工 业 大 学

计算机科学与工程学院

算 法 设 计 与 分 析

课 程 设 计

题 目:                五子棋                                    

班 级:                

人 数:                 13人                          

成 员:                                      

学 号:

时 间:            2008年元月16日                                           

目     录

1课程设计报告-------------------3

  1.1问题描述----------------------3

  1.2需求分析---------------------------3

  1.3概要设计-----------------------3

  1.4详细设计-----------------------5

  1.5调试分析---------------------6

2源程序---------------------6

3程序的说明文件-------------------13

4课设总结-----------------------13

1. 课程设计报告

1.1问题描述

连珠(五子棋)是有两个人在一盘棋上进行对抗的竞技运动。在对局开始时,先由用户选择哪方先开局,先开局一方将一枚棋子落在一点上,然后由另一方在对方棋周围的交叉点上落子,如此轮流落子,直到某一方首先在棋盘的直线、横线或斜线上形成连续的五子则该方就算获胜。此时,算法结束。当有任何一方想退出时,都可在算法中实现。
  1.2需求分析

  (1)、输出游戏规则并由用户决定是否遵守并开局。

  (2)、要求动态画出棋盘大小。

(3)、画棋子并确定其颜色。

  (4)、玩家轮流下棋。

(5)、判断键盘输入哪个键按规则执行操作

  (6)、判断谁先落棋。

  (7)判断赢家

1.3概要设计

    流程图:

算法设计与分析课程设计报告(五子棋)

1.4详细设计

  本程序中包含一个主函数和七个子函数,它们的函数名及功             能分别如下:

void draw_box();画棋盘,确定背景色和棋盘色按用户输入大小画                              出棋盘

void draw_cicle(int x,int y,int color);画棋子,确定棋子大小及颜色画出棋子。

void change();改变玩家,作战双方轮流下棋。

void judgewho(int x,int y);判断谁落棋,是1则画出白棋,是2则画出红棋。

void judgekey();判断键盘输入哪个键按规则执行操作,UP 键上移,DOWN键下移,LEFT键左移,RIGHT键右移,ESC键退出,SPACE键确定棋子落点。

int judgeresult(int x,int y);判断赢家,横向竖向斜向够5个相同颜色的棋子则为赢家。

void attentoin();显示游戏规则,按上下左右键移动棋子,按空格键确定棋子落点,不能在棋盘外按空格键。

1.5调试分析

  运行结果:屏幕显示:Please input who is first:1 or 2

    当输入1时,白棋先走;当输入2时,红棋先走。屏幕显示:Please  input the size of chessbox:从键盘输入t值,则棋盘大小为t*t型。屏幕显示:Left, Right, Up, Down KEY to move,  Space to put,  ESC-quit 及棋盘,棋子,用上下左右键控制棋子向,用空格键确定棋子的落点 。当白棋赢时,显示The White Win ! 当红棋赢时,显示The Red Win !

算法改进思想:将棋盘由原先的固定大小改进为可动态变化,由原来固定的白棋先走改进为让用户可以选择哪方先落子。

2源程序

#include

#include

#include

#include

#include

#define LEFT 0x4b00

#define RIGHT 0x4d00

#define DOWN 0x5000

#define UP 0x4800

#define ESC 0x011b

#define SPACE 0x3920

#define BILI 20

#define JZ 4

#define JS 3

#define N  19

int  box[N][N],s;                                      /*落子点*/

int step_x,step_y ;

int key ;

int flag,i,j ;

void draw_box();

void draw_cicle(int x,int y,int color);

void change();

void judgewho(int x,int y);

void judgekey();

int judgeresult(int x,int y);

void attentoin();

void attentoin()                                         /*游戏规则*/

{

     char ch ;

     printf("Play attentoins:\n\n");

     printf("1. Press Left,Right,Up,Down Key to move Piece\n\n");/*方向键移动棋子*/

     printf("2. Press Space to place the Piece\n\n");/*空格键确定棋子落点*/

     printf("3. DO NOT press Space outside of the draw_box\n\n");/*棋盘外不能落棋*/

     printf("Do you accept the above Playing attentoins? [Y/Other]:");/*是否遵守*/

     while(1)

     {   ch=getche();

         if(ch=='Y'||ch=='y') break ;

         else  exit(0);

     }

     printf("\n\nwhat size of the draw_box:");

     scanf("%d",&s);                                   /*输出棋盘大小*/

     printf("\n\nwho is the frist:1 or 2?  ");        /*谁先落子*/

     while(1)

     {  scanf("%d",&flag);

        if(flag!=1&&flag!=2)  printf("Error!\n");

        else break;

      }

}

void draw_box()                                      /*画出棋盘*/

{

     int x1,x2,y1,y2 ;

     setbkcolor(LIGHTBLUE);                         /*背景色*/

     setcolor(YELLOW);                             /*文本色*/

     gotoxy(7,2);

     printf("Left, Right, Up, Down KEY to move,  Space to put,  ESC-quit.");

       for(x1=1,y1=1,y2=s;x1<=s;x1++)

       line((x1+JZ)*BILI,(y1+JS)*BILI,(x1+JZ)*BILI,(y2+JS)*BILI);/*画竖线*/

       for(x1=1,y1=1,x2=s;y1<=s;y1++)

       line((x1+JZ)*BILI,(y1+JS)*BILI,(x2+JZ)*BILI,(y1+JS)*BILI);   /*画横线*/   

      for(x1=1;x1<=s;x1++)

      for(y1=1;y1<=s;y1++)

      box[x1][y1]=0 ;                                            /*棋盘初始化*/

}

void draw_cicle(int x,int y,int color)                           /*棋子*/

{

     setcolor(color);                                         /*棋子颜色*/

     setlinestyle(SOLID_LINE,0,1);                           /*线条类型*/

     x=(x+JZ)*BILI ;

     y=(y+JS)*BILI ;

     circle(x,y,8);                                         /*画半径为8的棋子*/

}

void judgekey()

{

     switch(key)

     {

         case LEFT :                                      /*左键控制棋子左移*/

          if(step_x-1<0)      break ;

          else

          {

             for(i=step_x-1,j=step_y;i>=1;i--)

             if(box[i][j]==0)

             { draw_cicle(step_x,step_y,LIGHTBLUE); break ;}

             if(i<1)break ;

             step_x=i ;

             judgewho(step_x,step_y);

             break ;

          }

        case RIGHT :                                    /*右键控制棋子右移*/

         if(step_x+1>s)    break ;

         else

         {

             for(i=step_x+1,j=step_y;i<=s;i++)

             if(box[i][j]==0)

             { draw_cicle(step_x,step_y,LIGHTBLUE); break ; }

             if(i>s)break ;

             step_x=i ;

             judgewho(step_x,step_y);

             break ;

         }

        case DOWN :                                         /*下键控制棋子下移*/

         if(step_y+1>s)   break ;

         else

         {

             for(i=step_x,j=step_y+1;j<=s;j++)

             if(box[i][j]==0)

             {  draw_cicle(step_x,step_y,LIGHTBLUE);break ; }

             if(j>s)break ;

             step_y=j ;

             judgewho(step_x,step_y);

             break ;

         }

        case UP :                                            /*上键控制棋子上移*/

         if(step_y-1<0)   break ;

         else

         {

             for(i=step_x,j=step_y-1;j>=1;j--)

             if(box[i][j]==0)

             { draw_cicle(step_x,step_y,LIGHTBLUE); break ; }

             if(j<1)break ;

             step_y=j ;

             judgewho(step_x,step_y);

             break ;

         }

         case ESC : break ;                                /*ESC键退出游戏*/

         case SPACE :                                     /*空格键控制落子*/

         if(step_x>=1&&step_x<=s&&step_y>=1&&step_y<=s)

         {

             if(box[step_x][step_y]==0)

             {

                 box[step_x][step_y]=flag ;

                 if(judgeresult(step_x,step_y)==1)

                 {

                     sound(1000);

                     delay(1000);

                     nosound();

                     gotoxy(30,4);

                     cleardevice();

                     if(flag==1)

                     {   settextstyle(3,0,5);

                         outtextxy(120,120,"The White Win !");  /*显示白棋赢*/

                         setcolor(14);                        

                     }

                     if(flag==2)

                     {   settextstyle(3,0,5);

                         outtextxy(120,120,"The Red Win !");  /*显示红棋赢*/

                         setcolor(15);

                         settextstyle(3,0,5);

                     }

                     getch();

                     exit(0);

                 }

                 change();

                 break ;

             }

         }

         else

         break ;

     }

}

void change()                                                 /*改变玩家*/

{

     if(flag==1)

     flag=2 ;

     else

     flag=1 ;

}

void judgewho(int x,int y)

{

     if(flag==1)

      draw_cicle(x,y,15);                                    /*画白棋*/

     if(flag==2)

      draw_cicle(x,y,4);                                    /*画红棋*/

}

int judgeresult(int x,int y)

{

     int j,k,n;

     while(1)

     {

         n=0 ;

         for(j=x,k=y;j>=1;j--)                             /*水平向左数*/

          {

             if(box[j][k]==flag)

             n++;

             else

             break ;

          }

         for(j=x,k=y;j<=s;j++)                             /*水平向右数*/

         {

             if(box[j][k]==flag)

             n++;

             else

             break ;

         }

         if(n>5)   return(1);

         n=0 ;

         for(j=x,k=y;k>=1;k--)                            /*垂直向上数*/

         {

             if(box[j][k]==flag)

             n++;

             else

             break ;

         }

         for(j=x,k=y;k<=s;k++)                            /*垂直向下数*/

         {

             if(box[j][k]==flag)

             n++;

             else

             break ;

         }

         if(n>5)  return(1);

         n=0 ;

         for(j=x,k=y;j>=1,k>=1;j--,k--)                      /*向左上方数*/

         {

             if(box[j][k]==flag)

             n++;

             else

             break ;

         }

         for(j=x,k=y;j<=s,k<=s;j++,k++)                      /*向右下方数*/

         {

             if(box[j][k]==flag)

             n++;

             else

             break ;

         }

         if(n>5)   return(1);

         n=0 ;

         for(j=x,k=y;j<=s,k>=1;j++,k--)                      /*向右上方数*/

         {

             if(box[j][k]==flag)

             n++;

             else

             break ;

         }

         for(j=x,k=y;j>=1,k<=s;j--,k++)                      /*向左下方数*/

         {

             if(box[j][k]==flag)

             n++;

             else

             break ;

         }

         if(n>5)   return(1);

         return(0);

     }

}

void main()

{

     int gdriver=VGA,gmode=VGAHI;                              /*定义图形适配器*/

     clrscr();

     attentoin();

     initgraph(&gdriver,&gmode,"c:\\tc");                         /*图形初始化*/

     draw_box();

     do

     {

         step_x=0,step_y=0 ;                                      /*棋盘初始化*/               

         judgewho(step_x-1,step_y-1);        

         do

         {

             while(bioskey(1)==0);

                  key=bioskey(0);

             judgekey();

         }

         while(key!=SPACE&&key!=ESC);

     }

     while(key!=ESC);

     closegraph();                                                /*关闭图形*/

}

3程序的说明文件

void draw_box();......................................7

void draw_cicle(int x,int y,int color);...............8

void change();........................................10

void judgewho(int x,int y);...........................10

void judgekey();......................................8

int judgeresult(int x,int y);.........................11

void attentoin();.....................................7

主函数................................................12

4课设总结       

     从1月14日开始,我们进行了为期一周的算法课程设计。通过这次课程设计,我们拓宽了知识面,锻炼了能力,综合素质得到较大提高。

    本次课程设计,使我们对从五子棋设计方案到设计的基本过程的设计方法、步骤、思路、有一定的了解与认识。在课程设计过程中,我们基本能按照规定的程序进行,先针对五子棋的设计收集、调查有关资料,其间,同组成员之间进行几次方案的讨论、修改,再讨论、再修改,最后定案。设计方案确定后,又在老师指导下进行扩充详细设计,最终用c语言实现了可视化的五子棋算法。整个过程周密有序,对我们按时高质完成课程设计非常有利!

    程设计达到了专业学习的预期目的。课程设计之后,我们普遍感到不仅实际动手能力有所提高,更重要的是进一步激发了我们对专业知识的兴趣,并能够结合实际存在的问题在专业领域内进行更深入的学习。                                     

    对我们计算机专业的本科生来说,实际能力的培养至关重要,而这种实际能力的培养单靠课堂教学是远远不够的,必须从课堂走向实践。通过课程设计,让我们找出自身状况与实际需要的差距,并在以后的学习期间及时补充相关知识,为求职与正式工作做好充分的知识、能力准备,从而缩短从校园走向社会的心理转型期。

   

相关推荐