系统开发.docx

上传人:b****9 文档编号:28581809 上传时间:2023-07-19 格式:DOCX 页数:107 大小:36.86KB
下载 相关 举报
系统开发.docx_第1页
第1页 / 共107页
系统开发.docx_第2页
第2页 / 共107页
系统开发.docx_第3页
第3页 / 共107页
系统开发.docx_第4页
第4页 / 共107页
系统开发.docx_第5页
第5页 / 共107页
点击查看更多>>
下载资源
资源描述

系统开发.docx

《系统开发.docx》由会员分享,可在线阅读,更多相关《系统开发.docx(107页珍藏版)》请在冰豆网上搜索。

系统开发.docx

系统开发

华中科技大学控制科学与工程系

 

《c语言程序设计》课程设计

实验报告

 

课题:

实验室元器件管理系统(LMS)

 

专业:

自动化

班级:

自动化0702

姓名:

赵旭峰周润康

学号:

u200713925

成绩:

 

完成时间:

2008年10月24日

 

目录

1.系统开发背景介绍...............3

2.系统功能模块图.................4

3.系统工程文件组成...............5

4.工作量说明.....................5

5.数据结构设计...................6

6.程序流程图.....................7

7.程序开发历程..................12

8.系统的亮点....................13

9.系统的不足....................13

10.编程规范.....................14

11.系统源码.....................17

 

(报告制作人:

赵旭峰周润康)

 

系统开发背景

系统名:

实验室元件器管理系统

NAME:

LabManageSystem(LMS)

系统缘起:

我们专业的课程设计

系统开发时间:

第三周至第二周

开发人员:

赵旭峰(组长)周润康

总代码量:

2435行

(计算标准:

函数与函数之间空一行,函数内无空行)

参考资料:

1.周纯杰,刘正林等.《标准C语言程序及应用》.武汉:

华中科技大学出版社.2005

2.刘玮玮,汪晓平.《C语言高级实例解析》.清华大学出版社.2005

3.飞思科技.《C语言范例开发宝典》.2008

4.王为青刘变红.《c语言高级编程及实例剖析》.2007

 

系统功能模块组成图

LabManageSystem

(LMS)

 

用户信息写操作

用户信息读操作

用户管理

元件写操作

元件读操作

元件读操作

普通用户

管理员用户

添加元件

修改元件

删除元件

查看统计

查看元件

搜索元件

元件写操作

元件读操作

元件模块

用户模块

系统文件组成

简介:

工程共包括八个文件,其中包括两个.h文件和六个.cpp文件

文件名

文件类型

文件行数

文件包含

Codeby

DRAWELEM

.CPP

325

绘制元件

相关函数

赵旭峰

ELEMDATA

.cpp

497

元件信息存储

读取相关函数

赵旭峰

CHINESE

.cpp

143

操作汉字库

相关函数

周润康

key

.h

8

键盘扫描码

宏定义

周润康

UI

.cpp

979

UI界面图形下输入输出函数

赵旭峰

LMS

.h

120

结构体声明

函数声明等

周润康

MAIN

.cpp

68

主函数及文件检测函数

赵旭峰

USERDATA

.cpp

295

用户信息存储

读取相关函数

周润康

工作量说明

赵旭峰:

负责元件模块,图形界面的编码,并负责后期代码整合

累计代码量1869/2435

周润康:

考虑到周润康同学是澳门籍学生,负责用户模块,工程头文件及系统汉化的编码工作

累计代码量566/2436

数据结构设计

管理员用户

charUserName[20](用户名)

StructUser

用户结构体

charUserPwd[20](密码)

用户信息存储文件:

userinfo.dat存储方式:

文本

元件信息

charEleName[20](元件名)

charEleClass[20](元件类型)

charTotalNum[6](元件总数)

charyear[5](购买年)

StructElement

元件结构体

charmonth[3](购买月)

charday[3](购买日)

charElePrice[6](购买架构)

charContent[200](购买内容)

Elementelem(元件结构体变量)

StructEleNode

元件链表节点

structelelink*next(下一个节点)

元件信息存储文件:

eleinfo.dat存储方式:

文本

程序流程图

主流程图

开始

结束

退出?

退出?

管理员操作模块

管理员操作模块

管理员身份?

创建缺失文件若用户文件不存在则提示第一次使用应添加管理员

调用ui_welcome函数

存储文件

存在?

调用welcome函数

管理员用户模块流程图

入口

返回上一层

退出程序

choice?

管理元件

管理用户

元件

管理

模块

用户

管理

模块

继续?

继续?

出口

普通用户流程图

返回上一层

入口

退出程序

choice?

查询元件

查看元件

调用SearchElement

函数

查看元件模块

继续?

继续?

出口

元件管理模块

 

入口

返回上一层

退出程序

Choice?

查看元件

查询元件

编辑元件

添加元件

进入

查看元件模块

调用

SearchElement函数

调用

DoEditElement函数

调用

AddElement函数

添加图形?

调用DrawElement

 

出口

 

用户管理模块

 

入口

退出程序

返回上一层

choice?

添加管理员

编辑管理员

查看管理员

删除管理员

调用

DelAdminByName

函数

调用

EditAdminByName

函数

调用

ShowAllAdmin

函数

调用

AddNewAdmin

函数

 

出口

查看元件模块

入口

 

返回上一层

退出程序

choice?

 

查看统计报表

按类别查看

查看所有

调用

ui_Count

函数

选择类别

调用ShowElementList函数

输入元件编号

调用ShowElement函数

编辑元件

管理员?

 

出口

 

程序开发日历

第三周:

进行初步需求分析,并讨论系统开发所需要的自习决定学习目标

第四周:

学习图形,文件处理,链表等方面知识

第五周:

详细系统分析,划分系统模块,分配开发任务,规划工程文件建立工程

第六周:

开始正式编码,完成用户模块大部分编码,并制作全部菜单完成系统流程接口

第七周:

汉化模块的实现,完成元件模块数据存储部分,并攻关实现图形方式下文本输入

第八周:

元件信息分页显示的攻关实现,键盘元件绘制系统的攻关实现,代码的最后整合和测试修改

系统历程:

实现文本下用户操作→添加图形菜单→添加文本元件操作→删除文本元件添加图形下添加元件→汉化系统→添加图形下搜索文件及显示元件具体信息→添加图形下编辑元件→添加图下元件信息的统计列表→添加图形下列表显示全部元件部分信息→添加元件列表的分页,导出功能→添加元件列表的六种排序功能→添加从元件列表进入元件详细信息功能→添加选择元件类型显示列表功能→添加键盘绘制元件图形模块→完

 

系统亮点

1.上下菜单,左右菜单,上下左右菜单的实现

2.图形下文本输入框,密码输入框的实现

3.图像下支持自动换行支持空格的文本域输入框的实现

4.支持换页,统计页数,显示当前页码的信息列表的实现

5.在键盘操作下绘制元件,拥有联动的效果展示区和四倍作图区,并能以设定格式保存图形信息

6.提取绘制元件文件的内部数据,实现元件图形显示功能

 

系统的不足

由于各种原因我们有如下设想功能还未实现

1.文件存储信息的加密和解密

2.鼠标绘制元件图形

3.输入框的非空验证

4.输入信息的格式验证

5.导出文件空格置换问题(为了解决读取不出空格问题,在存储元件信息是,我们用@置换掉空格,但在用户导出txt时候没有把@置换回空格)

编程规范

函数命名规范:

术语解释:

Pascal大小写

将标识符的首字母和后面连接的每个单词的首字母都大写。

可以对三字符或更多字符的标识符使用Pascal大小写。

例如:

BackColor

函数命名:

采用Pascal命名,名称应该说明“做什么”而不是“如何做”。

例如:

voidMediaPlay()

{

//method

}

代码规范:

每行一个语句

每行最多包含一个语句。

a++;//推荐

b--;//推荐

a++;b--;//不推荐

复合语句

复合语句是指包含"父语句{子语句;子语句;}"的语句,使用复合语句应遵循以下几点

1子语句要缩进。

2左花括号“{”在复合语句父语句的下一行并与之对齐,单独成行。

3即使只有一条子语句要不要省略花括号“{}”。

while(d+=s++)

{

n++;

}

return语句

return语句中不使用括号,除非它能使返回值更加清晰。

return;

returnmyDisk.size();

return(size?

size:

defaultSize);

if、if-else、ifelse-if语句

if、if-else、ifelse-if语句使用格式

if(condition)

{

statements;

}

if(condition)

{

statements;

}

else

{

statements;

}

if(condition)

{

statements;

}

elseif(condition)

{

statements;

}

else

{

statements;

}

for语句

for语句使用格式

for(initialization;condition;update)

{

statements;

}

空的for语句(所有的操作都在initialization、condition或update中实现)使用格式

for(initialization;condition;update);

注意1在循环过程中不要修改循环计数器。

2对每个空循环体给出确认性注释。

while语句

while语句使用格式

while(condition)

{

statements;

}

空的while语句使用格式

while(condition);

switch-case语句

switch-case语句使用格式

switch(condition)

{

case1:

statements;

break;

case2:

statements;

break;

default:

statements;

break;

}

注意:

1、语句switch中的每个case各占一行。

2、语句switch中的case按字母顺序排列。

3、为所有switch语句提供default分支。

4、所有的非空case语句必须用break;语句结束。

系统源码

LMS.H文件

//Codeby周润康

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include"key.h"

#defineBGIFILE"c:

\\BORLANDC\\BGI"//BGI文件路径的宏定义

#defineUserFile"userinfo.dat"//用户信息存储文件宏定义

#defineElementFile"eleinfo.dat"//元件信息存储文件宏定义

#defineHZKU"c:

\\zxf\\HZK16"//汉字库文件路径宏定义

//管理员结构体

structUser

{

charUserName[20];

charUserPwd[20];

};

//元件结构体

typedefstruct

{

charEleName[20];

charEleClass[20];

charTotalNum[6];

charyear[5];

charmonth[3];

charday[3];

charElePrice[6];

charContent[200];

}Element;

//元件链表节点

typedefstructelelink

{

Elementelem;

structelelink*next;

}EleNode;

//在main.cpp内的函数

voidWelcome();//检查文件是否存在不存在则创建若用户文件不存在调用第一次使用相关步骤

//在userdata.cpp内的函数

intCheckAllFile();//检查文件是否存在不存在则创建

voidAddNewAdmin(int);//添加一个新管理员

voidShowNewAdmin(structUser);//显示刚添加的管理员信息

voidOutPutAdminInfo(structUser);//格式化输出管理员信息

voidSaveNewAdmin(structUser);//把新管理员信息存进文档

intAdminLogin(structUser);//管理员登陆

voidInPutAdminInfo(int);//编辑和删除管理员的接口

voidEditAdminByName(structUser);//按用户名修改管理员

voidShowAllAdmin();//显示文件中所有存在的管理员信息

voidDelAdminByName(structUser);//按用户名删除管理员

//在elemdata.cpp内的函数

voidInsertOneElement(Element);//插入一个元件

voidInsertElelink(EleNode*,int);//插入一个元件链表

voidCreateTxt(EleNode*,int);//以txt形式导出链表

voidGetAllElement(EleNode*,int*);//获取所有元件信息

voidGetElementByClass(EleNode*,int*,char*);//按类型获取元件链表

voidSearchElementByName(Element*);//按元件名搜索元件

voidEditElementByName(Element,Element);//按原件名编辑元件

voidDelElementByName(Element);//按元件名删除元件

voidCountByClass(char*,long*,double*,int*);//统计元件信息

voidSortByNum(EleNode*,int,int);//按元件总数升降序排列

voidSortByPrice(EleNode*,int,int);//按元件价格升降序排列

voidSortByTime(EleNode*,int,int);//按元件购买时间升降序排列

voidChangeValue(EleNode*,EleNode*);//交换两个元件节点的元件值

Element*GetElementByNum(EleNode*head,intnum,Element*ele);//在链表中获取指定节点

voidGetElementList(intclassid,EleNode*head,int*num);//获取元件链表的接口

voidChoseSort(int,EleNode*,int);//选择排序方式

voidFreeAll(EleNode*,int);//释放链表占用的所有内存

//在ui.cpp内的函数

intui_welcome();//显示初始菜单

intShowMenu(charmenu[][20],int,int);//上下菜单函数

voidAboutLMS();//关于LMS

voidLeaveLMS();//欢迎下次使用LMS

intui_AdminLogin();//管理员LMS

voidPwdError();//提示密码错误

intui_Admin();//管理员主界面

intui_CommonUser();//普通用户主界面

voidui_UserManage();//用户管理界面

voidui_ElementManage();//元件管理界面

intShowClass();//显示元件种类

voidui_AddElement();//添加元件前台界面

voidSeeElement(int);//查看元件信息

voidSearchElement(int);//按名字搜索元件前台

voidShowElementList(int,int);//显示元件列表

voidShowElement(int,Element*);//显示单个元件具体信息

voidui_Count();//显示统计列表

voidui_EditElement(Element*);//编辑单个元件

voidDoEditElement();//编辑元件入口

voidInputTextBox(int,int,int,char*,int,int);//单行文本输入框

voidInputPassWord(int,int,int,char*,int);//密码输入框

voidChoiceClass(int,int,char*);//选择种类并提够上下左右选择

voidInputTextArea(int,int,int,int,char*,int,int);//多行文本输入框

//在DRAWELEM.CPP内的函数

voidIC(int,int,int);//画ic类通用图

voidDianZhu(int,int,int);//画电阻类通用图

voidDianRong(int,int,int);//画电容类通用图

voidDianGan(int,int,int);//画电感类通用图

voidDianLuBan(int,int,int);//画电路板类通用图

voidDianYuan(int,int,int);//画电源类通用图

voidShowPic(int,int,int,Element*);//显示元件图片

voidDrawElement(Element*);//用户自己画元件

voidShowPixel(int,int,int*);//显示画笔焦点

voidDelPixel(int,int,int*);//删除画笔焦点

voidSetColorlList(int*,int);//设置删除颜色

voidShowXY(int,int,int,int);//输出画笔坐标

//在Chinese.CPP内的函数

voidShowHz(int,int,unsignedchar,unsignedchar,int);//获取点阵并输出

voidOutHzxy(int,int,char*,int);//输出16*16汉字接口

voidShowBigHz(int,int,unsignedchar,unsignedchar,int);//放大获取点阵并输出

voidOutBigHzxy(int,int,char*,int);////输出32*32汉字接口

KEY.H

//codeby周润康

#defineKEY_ESC0x011b

#defineKEY_ENTER0x1c0d

#defineKEY_UP0x4800

#defineKEY_DOWN0x5000

#defineKEY_LEFT0x4b00

#defineKEY_RIGHT0x4d00

#defineKEY_BACK0x0e08

#defineCTRL_S0x1f13

Main.cpp

//codeby赵旭峰

#include"LMS.H"

voidmain()

{

inti=0,j=0;

Welcome();

while

(1)//进入程序主循环

{

i=ui_welcome();

switch(i)

{

case0:

break;

case1:

while

(1)//进入管理员用户模块循环

{

j=ui_Admin();

if(j==3)

{

break;

}

switch(j)

{

case1:

ui_UserManage();

break;

case2:

ui_ElementManage();

break;

case4:

exit(0);

}

}

break;

case2:

while

(1)//进入普通用户模块循环

{

j=ui_CommonUser();

if(j==3)

{

break;

}

switch(j)

{

case1:

SeeElement(0);

break;

case2:

SearchElement(0);

break;

case4:

exit(0);

}

}

break;

default:

exit(0);

}

}

}

voidWelcome()

{

if(CheckAllFile())

{

AddNewAdmin

(1);

}

}

USERDATA.cpp

//codeby周润康

#include"L

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1