设备管理系统包含各种设备的全部信息,每台设备为一种记录,包括设备编号,设备名称,设备型号,设备厂家,设备购买日期等。能够显示和统计各种设备信息。
1.2.1 功能需求
系统功能列表如表1.1所示。
表1.1 系统功能列表
功能编号 |
功能名称 |
功能描述 |
1 |
系统登陆 |
根据验证码输入用户名和密码 |
2 |
功能选择 |
为用户提供进行功能选择的界面。功能选择包括设备信息录入、设备信息查询、设备信息修改、设备信息删除、维修记录管理、设备信息管理系统制作人信息、推出 |
3 |
设备信息录入 |
设备编号录入、设备名称录入、设备型号录入、设备厂家录入、设备购买日期录入 |
4 |
设备信息更改 |
设备编号更改、设备名称更改、设备型号更改、设备厂家更改、设备购买日期更改 |
5 |
设备信息删除 |
选择编号进行设备信息删除 |
6 |
设备查找 |
根据编号信息进行设备查找 |
7 |
维修记录管理 |
进行维修操作的记录或查找 |
8 |
显示所有设备 |
显示系统所录入的所有设备信息 |
9 |
关于 |
显示管理系统制作人的各种信息 |
10 |
退出 |
按任意键退出系统 |
2.1.1 系统结构
说明系统模块划分情况。如图。
2.1.2 处理流程
说明系统处理流程。如图2.2所示。
图2.2 系统处理流程图
2.2.1 用户接口
说明将向用户提供的命令和它们的语法结构,以及软件的回答信息,一般为用户界面设计,可用图表示。
1.用户登录界面如图2.3所示
图2.3 系统登录界面
2. 用户登入界面如图2.4所示
3.设备信息录入如图2.5所示
图2.5 设备信息录入界面
4.设备信息更改如图2.6所示
图2.6 设备信息更改界面
5.设备查找如图2.7所示
图2.7 设备查找界面
6.维修记录管理如图2.8和2.9和3.0所示
图2.8
图2.9 维修记录页面
图3.0 维修查找页面
7.设备显示如图3.1所示
图3.2 所有设备信息显示页面
8.相关信息
9.信心删除界面如图3.4所示
图3.4 信息删除页面
2.2.2 外部接口
说明本系统同外界的所有接口,包括软件与硬件之间的接口、本系统与各支持软件之间的接口关系。
在myfile.txt中建立或更改增加删除信息。
2.2.3 内部接口
说明本系统之内的各个系统元素之间的接口的安排,如函数接口。如表2.1所示。
表2.1 内部接口
函数编号 |
函数定义 |
函数说明 |
1 |
void RandomCode (char Rcode[]) |
随机码产生函数 |
2 |
int LandedApp (char *password[], char Rcode[]) |
登陆函数 |
3 |
void fprintE(Equipment *head) |
输出到文件 |
4 |
void addEquipment(Equipment *head) |
添加设备 |
5 |
void deleteEquipment(Equipment *head,int num) |
删除设备信息 |
6 |
void changeEquipment(Equipment *head,int num) |
更新设备信息 |
7 |
void findEquipment() |
设备信息查找 |
8 |
Equipment* fscanE() |
读取设备信息 |
9 |
void repairEquipment() |
维修信息管理 |
10 |
void printList(Equipment *head) |
输出设备信息列表 |
11 |
int checkNum(Equipment *head, int num) |
检查设备信息 |
本模块的主要功能是为用户显示选项功能。
具体算法如下:
puts ("\n成功登陆!\n\n");
system("cls");
Equipment *head = (Equipment*)malloc(sizeof(Equipment));
head->next = NULL;
int num = -1;
while(num!=0){
printf("\n\n\t◢█◣◢█◣\t~~~~~~~~欢迎进入实验室设备管理系统!~~~~~~~\n");
printf("\t██████\n");
printf("\t◥████◤\n");
printf("\t ◥██◤\n");
printf("\t ◥◤\n");
printf("\n\t\t~~~~~~~~~~请输入您选择的操作(0~7):~~~~~~~~~~~~~~\n");
printf("\t\t1.设备信息录入\t2.设备信息更改\t");
printf("\t3.设备信息删除\n\t\t4.设备查找\t5.维修记录管理\t\t6.显示所有设备\n\t\t7.关于\t\t0.退出\n");
printf("\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
system("color E9");
Sleep(5000);
本模块的主要功能是: 让用户输入用户名以及密码,并为了安全起见,需要输入随机码进行验证。若用户名密码以及随机码输入正确,则进行下一步,若输入错误三次之后自动退出程序。
具体算法如下:
void RandomCode (char Rcode[]) /*随机码产生函数*/
{
int i;
srand ((unsigned int)time(NULL));
for (i = 0; i < 3; ++i)
Rcode[i] = rand()%10 + '0';
Rcode[i] = '\0';
}
/*登陆函数,判断信息是否匹配,若匹配返回bai1,否则返回0*/
int LandedApp (char *password[], char Rcode[])
{
char name[10] = {0};
char pword[10] = {0};
char rcode[4] = {0};
printf ("用户名 : ");
gets (name);
printf ("密码 : ");
gets (pword);
printf ("随机码 : ");
gets (rcode);
if (strcmp (name, password[0]) != 0 || strcmp (pword, password[1]) != 0 || strcmp (rcode, Rcode) != 0)
return 0;
else
return 1;
}
char * password[2] = {"admin", "admin123"}; //用户名和密码
char rc[4] = {0}; //随机码
int count = 3; //可输入次数
system("color E9");
puts("\t\t\t\t\t▼▼▼▼▼▼▼▼▼▼▼▼▼");
puts ("\n\t\t\t\t\t请输入用户名,密码和随机码:");
while (count)
{
RandomCode (rc);
printf ("\t\t\t\t\t随机码 : %s\n\n", rc);
puts("\t\t\t\t\t▲▲▲▲▲▲▲▲▲▲▲▲▲");
if (LandedApp(password, rc) != 0)
break;
--count;
if (count != 0)
puts ("\n\t\t\t\t错误的用户名或密码或随机码,请重新输入: ");
}
输入随机验证码进行验证,若三次验证失败则退出系统
void RandomCode (char Rcode[]) /*随机码产生函数*/
int LandedApp (char *password[], char Rcode[]) //登录函数
本模块的主要功能是:文件的输入输出,录入设备各种信息
具体算法如下:
//输出到文件
void addEquipment(Equipment *head){
Equipment *tail = head;
while(tail->next!=NULL) tail = tail->next;
Equipment *newnode = (Equipment*)malloc(sizeof(Equipment));
printf("请输入设备编号:");
scanf("%d",&newnode->num);
if(checkNum(head,newnode->num)){
printf("输入编号已有,输入失败!\n");
return;
}
printf("请输入设备名称:");
scanf("%s",&newnode->name);
printf("\n请输入设备型号:");
scanf("%s",&newnode->model);
printf("\n请输入设备厂家:");
scanf("%s",&newnode->factory);
printf("\n请输入设备购买日期:");
scanf("%s",&newnode->buy_date);
tail->next = newnode;
newnode->next = NULL;
fprintE(head);
printf("录入成功!\n");
}
本模块的主要功能是:设备信息的输入
具体算法如下:
//输入
void fprintE(Equipment *head){
FILE *fp=fopen("data.txt","w");
Equipment *current = head->next;
while(current){
fprintf(fp,"%d\n",current->num);
fprintf(fp,"%s\n",current->name);
fprintf(fp,"%s\n",current->model);
fprintf(fp,"%s\n",current->factory);
fprintf(fp,"%s\n",current->buy_date);
current = current->next;
}
fclose(fp);
}
本模块的主要功能是:设备信息的确认和删除,先确认查找的设备信息是否存在,若存在则根据需求进行信息删除,若不存在则进行错误提示。
具体算法如下:
//删除
void deleteEquipment(Equipment *head,int num){
if(head->next==NULL){
printf("没有设备!请先录入设备! \n");
return;
}
Equipment *current = head;
Equipment *current_next = current->next;
while(current_next){
if(current_next->num==num){
current->next = current_next->next;
printf("删除成功! \n");
fprintE(head);
return;
}
current = current->next;
current_next = current_next->next;
}
printf("删除失败,没有找到设备编号! \n");
}
本模块的主要功能是:设备信息的更新,先进行设备信息的查找确认是否存在,若存在则修改曾经信息;若查找信息不存在则进行错误提示。
具体算法如下:
//更新
void changeEquipment(Equipment *head,int num){
if(head->next==NULL){
printf("没有设备!请先录入设备! \n");
return;
}
Equipment *current = head->next;
while(current && (current->num!=num)){
current = current->next;
}
if(current!=NULL){
printf("请输入更新后的数据:");
printf("\n请输入设备编号:");
scanf("%d",¤t->num);
printf("\n请输入设备名称:");
scanf("%s",¤t->name);
printf("\n请输入设备型号:");
scanf("%s",¤t->model);
printf("\n请输入设备厂家:");
scanf("%s",¤t->factory);
printf("\n请输入设备购买日期:");
scanf("%s",¤t->buy_date);
fprintE(head);
}else{
printf("操作失败,没有找到设备编号! \n");
}
}
本模块的主要功能是:设备信息的查找,输入相关信息的编号进行设备信息全显示。
具体算法如下:
//查找
void findEquipment(){
Equipment *head = fscanE();
if(head->next==NULL){
printf("没有设备!请先录入设备! \n");
return;
}
int num;
printf("请输入查找设备的编号:");
scanf("%d",&num);
while(head){
if(head->num==num){
printf("编号为%d的信息为:\n",num);
printf("编号:%d\n",head->num);
printf("名称:%s\n",head->name);
printf("型号:%s\n",head->model);
printf("厂家:%s\n",head->factory);
printf("生产日期:%s\n",head->buy_date);
return;
}
head = head->next;
}
printf("查找失败,没有找到设备编号! \n");
}
本模块的主要功能是:从文件中读取所储存的设备信息。
具体算法如下:
//从文件读取设备信息
Equipment* fscanE(){
Equipment *head1 = (Equipment*)malloc(sizeof(Equipment));
head1->next = NULL;
Equipment *current = head1;
FILE *fp = fopen("data.txt","r");
while(!feof(fp)){
Equipment *newnode = (Equipment*)malloc(sizeof(Equipment));
fscanf(fp,"%d\n",&newnode->num);
fscanf(fp,"%s\n",newnode->name);
fscanf(fp,"%s\n",newnode->model);
fscanf(fp,"%s\n",newnode->factory);
fscanf(fp,"%s\n",newnode->buy_date);
current->next = newnode;
newnode->next = NULL;
current = current->next;
}
fclose(fp);
return head1;
}
本模块的主要功能是:设备信息全输出,先输入编号进行查找,若存在此信息,则输出全信息,若不存在,则进行错误提示。
具体算法如下:
//输出
void printList(Equipment *head){
if(head->next==NULL){
printf("没有设备,请先录入设备! ");
return;
}
Equipment *current = head->next;
printf("--☆-★--☆-★--☆-☆--★-☆--★-☆--★---☆-★--☆-★--☆-☆\n\n");
printf(" 编号 名称 型号 厂家 生产日期 \n");
while(current){
printf("\t%d\t%s\t%s\t%s\t%s\n",current->num,current->name,current->model,current->factory,current->buy_date);
current = current->next;
}
printf("--☆-★--☆-★--☆-☆--★-☆--★-☆--★---☆-★--☆-★--☆-☆\n\n");
}
设备管理系统正确地实现了所要求的功能:用户界面友好;程序运行速度快,具有较高的可靠性;程序易读,结构清晰,具有良好的可扩展性。
当然系统仍然存在一些不足之处:检索功能不够完善,整体界面不够美观,背景只有单调的颜色,没有动画效果这些都有待进一步地开放和实现。
通过本次项目实习,不仅巩固和掌握了C语言的知识,数据结构的知识,结构化程序设计的思想,而且对软件开发的过程有了一定的感性认识。
代码我放进文件,需要可以自取
基于C语言的设备管理系统.zip-C/C++文档类资源-CSDN下载