| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 461 人关注过本帖
标题:高手请支招
取消只看楼主 加入收藏
lilyhsx
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-8-13
收藏
 问题点数:0 回复次数:1 
高手请支招
老师让编一个程序完成以下功能,我刚刚学习,请高手指教              


1    引言

1.1    编写目的
尽可能详细地描述程序各成份的设计思路,以利于编制程序。

1.2    项目背景
该项目的实施主要是为提高北京梅梅公司的人事管理效率而编制的。

1.3    定义

1.4    参考资料

2    程序系统的组织结构

2.1    程序关系
本系统的每一项功能由一个或几个函数来实现。每一个菜单对应一个功能函数。
2.2    程序运行过程
1.    系统在运行后,首先从文件中得到被保存的软件测试工程师信息,来初始化系统与工程师信息有关的数据结构;
2.    用户选择在系统功能菜单中选择要进行的操作,选择后调用对应的函数;
3.    完成必要的相应的功能模块;
4.    系统完成该项功能后,显示结果信息给用户;
5.    系统可返回第2步,供用户继续选择要进行的操作;
6.    用户选择菜单中的0系统结束,在系统结束时如果用户修改的数据,则提示用户是否把数据保存到文件。
2.3系统菜单界面
系统运行中提供用户选择的主菜单如下:
 
图一:系统主菜单
2.4系统处理流程
 
 
图二:系统处理流程
2.5接口设计
系统使用DOS环境和windows下的虚拟DOS环境。与用户的接口是通过控制台交互,系统提供用户菜单,系统接收用户键盘输入,输入和输出均等均在显示器上显示。


3总体设计
3.1输入项目
    系统的输入项目主要是用户的输入和选择。
    在提示用户选择时,提示用户选择菜单的编号,编号以数字的输入。在提示排序时也是以提示用户选择排序方式,排序方式也是以数字编号的形式输入。
    用户在输入软件测试工程师信息时,输入用户的输入有可能是数字(包括实型),也可能是字符或字符串。
    输入限制在函数功能设计中进行说明。
3.2输出项目
    系统的输出主要是工程师信息资料,各项信息以要求的形式输出。输出格式在函数功能设计中说明。
    输出也包括计算出的工程师当月薪水。
3.3功能要求
    要求系统能够接收用户输入的工程师信息。
3.4性能要求
    要求本系统在完成各项功能的同时,要求系统处理迅速,处理事务需要长时间时,提示用户等待且等待时间在用户可接收的范围之内。
    精度要求:输出实型数据时只保留两位小数。

3.5系统数据结构设计

    软件测试工程师的数据结构如下:
    struct EngineerStruct  //声明存储工程师信息的结构体
    {
        unsigned int EngineerNo;         //工程师编号
        char EngineerName[20];             //工程师姓名
        unsigned int EngineerSex;         //工程师性别
        struct DateStruct  EngineerBirth;  //工程师生日
        char EngineerHometown[10];         //工程师籍贯
        unsigned int EngineerEducation;     //工程师学历
        char EngineerAddress[30];         //工程师地址
        char EngineerPhone[15];             //工程师电话
        unsigned int EngineerWorkYears;     //工程师工龄
        float EngineerBaseSalary;         //工程师基本薪水
       unsigned in EngineerMonthWorkDays;     //工程师月工作天数
float EngineerMonthBenefit;   //工程师月效益
float EngineerMonthInsurance;  //工程师基本薪水
double Salary                 //工程师月薪水
unsigned int select;           //用户输入的的功能菜单编号


    };
    工程师的生日用数据结构表示如下:
    struct DateStruct       //日期结构,用于存储工程师的出生生日
    {      
          int year;
         int month;
         int day;
    };
声明枚举类型:
enum Status{FALSE,TRUE};//控制输入情况的两种状态
enum Sex{male,female};  //性别分类,默认0为男、1为女
enum Education{high,bachelor,master,docter,other};  //学历分类,默认0开始

存储软件测试工程师的的当月工资天数和当月薪水的数据结构如下:

double Salary[10]={0.0};              //工程师薪水
    unsigned  int EngineerMonthWorkDays[10]={0}; //工程师工作天数

3.6各函数调用关系









 
图三:函数调用关系图
4各功能函数设计
4.1主函数
int main(void);
4.1.1程序描述
主函数是完成系统各个功能模块的调用。同时定义系统使用的变量数据以及一些控制系统运行状态的变量。
4.1.2功能
主函数的功能主要是完成各个功能函数的调用,处理各个函数之间的接口关系。控制系统的运行状态等。
只能选择功能菜单中提示的功能,如果用户选择错误,则显示菜单供用户重新选择。
4.1.3性能
主函数性能要求相应用户选择菜单迅速及时,同时在用户输入错误时能够及时提示用户输入错误,并提示用户重新输入。

4.1.4输入项目
用户输入的的功能菜单编号。为无符号整型数据,定义变量为unsigned int select;

4.1.5输出项目
    主函数在运行结束后返回到操作系统。正常退出返回0。异常退出返回1。
4.1.6算法
    显示供用户选择的菜单,提示用户选择,接收用户选择,根据用户选择调用相应的功能函数。
4.1.7程序逻辑

 
图四:主函数流程图


4.1.8接口
调用初始化数据函数InitData(engineer);     调用menu()函数显示系统功能菜单。
4.1.9存储分配
由操作系统分配该系统的内存使用。

4.1.10限制条件
无。
4.1.11测试要点
    用户选择输入错误时是否具有错误提示功能以及重新显示菜单功能。
4.2输入工程师信息函数
    void InputEngineerInformation(struct EngineerStruct *Engineer);
    参数:struct EngineerStruct *Engineer,工程师数据结构指针。                          
    返回值:无            
4.2.1程序描述
该函数的主要是完成系统软件测试工程师信息的输入。
4.2.2功能
主函数的功能主要是完成软件测试工程师信息的输入。在提示用户输入信息中,提示用户输入的数值或字符串。同时对用户的输入进行合法性值域判断,如果用户输入错误则提示用户重新输入。最多存储10个软件测试工程师的信息。
4.2.3性能
接收用户输入及时,错误提示信息明确。
4.2.4输入项目
用户输入软件测试工程师的信息如下:
    unsigned int EngineerNo;         //工程师编号
    char EngineerName[20];             //工程师姓名
    unsigned int EngineerSex;         //工程师性别
    struct DateStruct  EngineerBirth;//工程师生日
    char EngineerHometown[10];         //工程师籍贯
    unsigned int EngineerEducation;     //工程师学历
    char EngineerAddress[30];         //工程师地址
    char EngineerPhone[15];             //工程师电话
    unsigned int EngineerWorkYears;     //工程师工龄
    float EngineerBaseSalary;         //工程师基本薪水
    
    要求:编号为数字,编号使用4为位数字,格式为0001、0002….,不能重复。
    姓名:为字符,最长不超过20个字符。不能为空。
    性别:用数字表示0表示女,1表示男。不能为其它数值。
    生日:用数字分别表示年、月、日。格式例如:年使用四位数字表示,月使用1-12表示,            日使用1-31表示。范围是(1900,2004)
    籍贯:使用字符表示,最长不超过10个字符。不能为空。
    学历:使用数字表示高中0、学士1、硕士2、博士3、其它为4。不能为其它数字。
    地址:使用字符表示,最长不超过30个字符。不能为空。
    电话:使用字符表示,最长不超过15个字符。不能为空。
    工龄:使用数字表示,工龄范围是(0,50]。
    基本薪水:为实型,不能为0。
4.2.5输出项目
    函数调用后设置工程师数据已经修改标志,IfModfiy=TRUE;表示工程师的信息有变化,以供在退出系统前,提示用户是否要保存。
4.2.6算法
    算法使用下面的流程图来表示。

4.2.7程序逻辑




 

 

 

图五:输入工程师信息流程图









4.2.8接口
调用后通过参数修改了主函数中的工程师数据结构。
4.2.9存储分配
由操作系统分配该系统的内存使用。

4.2.10限制条件
无。
4.2.11测试要点
    用户选择输入错误时是否具有错误提示功能以及重新提示输入功能。

其它函数需要学员自己填充。
5程序与数据结构
5.1全局变量
程序中定义的全局变量可如下:
#define MAXNUM 10 //宏定义,最多存储的工程师人数
FILE *fp;         //保存文件的指针
char *FileName="engineer.txt";    //保存工程师信息
char *ReportName="report.txt";    //生成报表文件
unsigned int ActualNum=0;//实际存储的工程师人数
unsigned int *pNumber=&ActualNum;//指向实际存储人数的变量
enum Status  IfModfiy=FALSE;  //是否对工程师信息数据进行修改的状态,TRUE是已修改
5.2数据结构使用
各函数模块与所用到的数据结构如下表所示:
模块标识    操作数据
InitData    EngineerStruct
menu    
WhichChoose    EngineerStruct
SystemOver    EngineerStruct
InputEngineerInformation    EngineerStruct、Status
DeleteEngineerInformation    EngineerStruct
SearchEngineerInformation    EngineerStruct
ModifyEngineerInformation    EngineerStruct、Status
CalculateEngineerSalary    EngineerStruct、Salary、EngineerMonthWorkDays
EngineerInfomationSave    EngineerStruct
EngineerInformationNoSort    EngineerStruct
EngineerInformationNameSort    EngineerStruct
EngineerInformationWorkYearSort    EngineerStruct
OutputEngineerInfomation    EngineerStruct、Salary、EngineerMonthWorkDays
DeleteEngineer    EngineerStruct
EngineerInfomationReport    EngineerStruct
PrintEngineerInfomation    EngineerStruct
EngineerInformationReload    EngineerStruct


6系统出错处理设计
当系统运行出错时,用户可以重新启动本系统,重新执行,且能够恢复用户的数据。
7安全保密计划
存储软件测试工程师资料的文件可使用加密的形式存储。
2008-08-13 20:14
lilyhsx
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-8-13
收藏
得分:0 
帮帮我吧,我摸不着头绪
2008-08-13 21:56
快速回复:高手请支招
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016502 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved