C语言设备管理系统

1 需求分析

1.1 系统功能简述

设备管理系统包含各种设备的全部信息,每台设备为一种记录,包括设备编号,设备名称,设备型号,设备厂家,设备购买日期等。能够显示和统计各种设备信息。

1.2 需求规格

1.2.1 功能需求

系统功能列表如表1.1所示

表1.1 系统功能列表

功能编号

功能名称

功能描述

1

     系统登陆

根据验证码输入用户名和密码

2

功能选择

为用户提供进行功能选择的界面。功能选择包括设备信息录入、设备信息查询、设备信息修改、设备信息删除、维修记录管理、设备信息管理系统制作人信息、推出

3

设备信息录入

设备编号录入、设备名称录入、设备型号录入、设备厂家录入、设备购买日期录入

4

设备信息更改

设备编号更改、设备名称更改、设备型号更改、设备厂家更改、设备购买日期更改

5

设备信息删除

选择编号进行设备信息删除

6

设备查找

根据编号信息进行设备查找

7

维修记录管理

进行维修操作的记录或查找

8

显示所有设备

显示系统所录入的所有设备信息

9

关于

显示管理系统制作人的各种信息

10

退出

按任意键退出系统

2.2 总体设计

2.1.1 系统结构

说明系统模块划分情况。如图。

C语言设备管理系统_第1张图片

2.1.2 处理流程

说明系统处理流程。如图2.2所示。

C语言设备管理系统_第2张图片

图2.2 系统处理流程图

2.2 接口设计 

2.2.1 用户接口

说明将向用户提供的命令和它们的语法结构,以及软件的回答信息,一般为用户界面设计,可用图表示。

1.用户登录界面如图2.3所示

C语言设备管理系统_第3张图片

图2.3 系统登录界面

 2. 用户登入界面如图2.4所示

C语言设备管理系统_第4张图片图2.4 用户登入界面

3.设备信息录入如图2.5所示

C语言设备管理系统_第5张图片

 图2.5 设备信息录入界面

4.设备信息更改如图2.6所示

C语言设备管理系统_第6张图片

 图2.6 设备信息更改界面

5.设备查找如图2.7所示

C语言设备管理系统_第7张图片

 图2.7 设备查找界面

6.维修记录管理如图2.8和2.9和3.0所示

C语言设备管理系统_第8张图片

图2.8

C语言设备管理系统_第9张图片

图2.9 维修记录页面

C语言设备管理系统_第10张图片

图3.0 维修查找页面

 7.设备显示如图3.1所示

C语言设备管理系统_第11张图片

图3.2 所有设备信息显示页面

 8.相关信息

 9.信心删除界面如图3.4所示

C语言设备管理系统_第12张图片

图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)

检查设备信息

3.1 系统主控模块设计

本模块的主要功能是为用户显示选项功能。

具体算法如下:

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);   

3.2 用户注册模块设计

本模块的主要功能是: 让用户输入用户名以及密码,并为了安全起见,需要输入随机码进行验证。若用户名密码以及随机码输入正确,则进行下一步,若输入错误三次之后自动退出程序。

具体算法如下:

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[])   //登录函数

3.3 输出模块设计

本模块的主要功能是:文件的输入输出,录入设备各种信息

具体算法如下:

//输出到文件
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");
}

3.4 输入模块设计

本模块的主要功能是:设备信息的输入

具体算法如下:

//输入
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);
}

3.5 删除模块设计

本模块的主要功能是:设备信息的确认和删除,先确认查找的设备信息是否存在,若存在则根据需求进行信息删除,若不存在则进行错误提示。

具体算法如下:

//删除
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");
}

3.6 更新模块设计

本模块的主要功能是:设备信息的更新,先进行设备信息的查找确认是否存在,若存在则修改曾经信息;若查找信息不存在则进行错误提示。

具体算法如下:

//更新
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");
    }
}

3.7 查找模块设计

本模块的主要功能是:设备信息的查找,输入相关信息的编号进行设备信息全显示。

具体算法如下:

//查找
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");
 
}

3.8 文件读取模块设计

本模块的主要功能是:从文件中读取所储存的设备信息。

具体算法如下:

//从文件读取设备信息
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;
}

3.9 信息全输出模块设计

本模块的主要功能是:设备信息全输出,先输入编号进行查找,若存在此信息,则输出全信息,若不存在,则进行错误提示。 

具体算法如下:

//输出
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下载

你可能感兴趣的:(c语言,开发语言,后端)