0


C语言程序实训--实验设备管理系统

之前学校c语言程序实训课要求写的

如果程序有错误或可以改进的地方,希望各位指出

开发环境:IDE        Visual Studio Code/Dev C++
        处理器      AMD Ryzen 7 PRO 6850HS with Radeon Graphics       3.20 GHz
        机带 RAM    16.0 GB (15.3 GB 可用)
        系统类型    64 位操作系统, 基于 x64 的处理器

一.课程设计功能需求:

  1. 设备录入, 2、设备输出, 3、设备查询, 4、设备修改, 5、设备删除, 6、设备排序, 7、设备分类, 8、设备统计, 9、设备信息保存, 10、设备信息读取

二.功能展示:

三.程序亮点:

  1. 运用函数嵌套(在别的自定义函数中用到自定义print函数)

2.多文件(模块化)c程序

包含3个主要文件,main.c,head.h,fun.c

其中main.c中为主函数,head.h中为fun.c中的函数的声明,fun.c中为用户自定义函数

3.实现文件的导入导出

导出俩个文件data.txt用于存储设备内容 len.txt用于存储数组长度

4.在文件导入导出处使用指针

5.在设备排序中用到冒泡排序

6.多处用到

system (“pause”); 暂停程序

System (“cls”); 清除屏幕上的所有内容

使界面更加简洁

四.程序源代码:

main.c

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"head.h" //引入头文件

typedef struct
{
    char name[50]; //设备名称
    char type[50]; //设备类型
    char id[50]; //设备id
    char date[50]; //设备购买日期
    char state[50]; //设备状态
}DEV;

int main()
{
    DEV dev[50];
    strcpy(dev[0].id,"0"); //用于判断文件是否正常导入,若正常导入,0将会被覆盖
    int len;
    for (;;)
    {
        switch (menu_list())
        {
            case 0:len=enter_list(dev);break;
            case 1:show_list(dev,len);break;
            case 2:search_list(dev,len);break;
            case 3:change_list_dev(dev,len);break;
            case 4:len=del_list_dev(dev,len);break;
            case 5:len=add_list_dev(dev,len);break;
            case 6:sort_list_dev(dev,len);break;
            case 7:classify_list_dev(dev,len);break;
            case 8:sata_list(dev,len);break;
            case 9:write_list(dev,len);break;
            case 10:len=read_list(dev);break;
            case 11:exit(0);break;
        }
    }
    system ("pause");
    return 0;
}

head.h

int menu_list();
int enter_list();
void show_list();
void search_list();
void change_list_dev();
int del_list_dev();
int add_list_dev();
void sort_list_dev();
void print();
void classify_list_dev();
void sata_list();
//函数声明

fun.c

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct
{
    char name[50]; //设备名称
    char type[50]; //设备类型
    char id[50]; //设备id
    char date[50]; //设备购买日期
    char state[50]; //设备状态
}DEV;

int menu_list() //显示菜单
{
    printf("---------实验设备管理系统---------\n");
    printf("| 0.设备录入                     |\n"); //Done
    printf("| 1.设备输出                     |\n"); //Done
    printf("| 2.设备查询                     |\n"); //Done
    printf("| 3.设备修改                     |\n"); //Done
    printf("| 4.设备删除                     |\n"); //Done
    printf("| 5.设备增加                     |\n"); //Done
    printf("| 6.设备排序(按id)               |\n"); //Done
    printf("| 7.设备分类                     |\n"); //Done
    printf("| 8.设备统计                     |\n"); //Done
    printf("| 9.导出                         |\n"); //Done
    printf("| 10.导入                        |\n"); //Done
    printf("| 11.退出系统                    |\n"); //Done
    printf("----------------------------------\n");
    int n;
    printf("键入选择:");
    scanf("%d",&n);
    return n;
}

int enter_list(DEV dev[]) //设备录入
{
    system ("cls"); //清除屏幕上的所有内容
    int i,len;
    printf("键入需要录入设备的个数:");
    scanf("%d",&len);
    printf("\n");
    for ( i = 0; i < len; i++)
    {
        printf("设备名称:");
        scanf("%s",dev[i].name);
        printf("设备类型:");
        scanf("%s",dev[i].type);
        printf("设备id(6位):");
        scanf("%s",dev[i].id);
        printf("设备购买日期:");
        scanf("%s",dev[i].date);
        printf("设备状态:");
        scanf("%s",dev[i].state);
        printf("----------------------------------\n");
        printf("\n");
    }
    system ("cls"); //清除屏幕上的所有内容
    return len;
}

void show_list(DEV dev[],int len) //设备输出
{
    system ("cls"); //清除屏幕上的所有内容
    int i;
    for ( i = 0; i < len; i++)
    {
        print(dev,i); //-----函数嵌套-----
    }
    system ("pause"); //系统中断
    system ("cls");
}

void search_list(DEV dev[],int len) //设备查询
{
    system ("cls");
    char tar[50];
    int i;
    printf("输入设备id:");
    scanf("%s",tar);
    for ( i = 0; i < len; i++)
    {
        if (strcmp(tar,dev[i].id)==0)
        {
            printf("\n");
            printf("-----找到设备-----\n");
            print(dev,i);
            break;
        }
    }
    if (i>=len)
    {
        printf("-----找不到该设备-----\n");
    }
    system ("pause");
    system ("cls");
}

void change_list_dev(DEV dev[],int len) //设备信息修改
{
    system ("cls");
    char tar[50];
    int i;
    printf("键入需要修改信息的设备id:");
    scanf("%s",tar);
    for ( i = 0; i < len; i++)
    {
        if (strcmp(tar,dev[i].id)==0)
        {
            printf("\n");
            printf("-----找到设备-----\n");
            printf("新的设备名称:");
            scanf("%s",dev[i].name);
            printf("新的设备类型:");
            scanf("%s",dev[i].type);
            printf("新的设备id(6位):");
            scanf("%s",dev[i].id);
            printf("新的设备购买日期:");
            scanf("%s",dev[i].date);
            printf("新的设备状态:");
            scanf("%s",dev[i].state);
            printf("-----设备信息修改成功-----\n");
            printf("\n");
            break;
        }
    }
    if (i>=len)
    {
        printf("-----找不到该设备-----\n");
    }
    system ("pause");
    system ("cls");
}

int del_list_dev(DEV dev[],int len) //删除设备
{
    system ("cls");
    printf("输入需要删除的设备的id:");
    char tar[50];
    char judge[5];
    int i,flag=0;
    scanf("%s",tar);
    for ( i = 0; i < len; i++)
    {
        if (strcmp(tar,dev[i].id)==0)
        {
            printf("\n");
            printf("-----找到设备-----\n");
            print(dev,i); //-----函数嵌套-----
            printf("确认删除(Y/S)?");
            scanf("%s",judge);
            int j;
            if (strcmp(judge,"Y")==0)
            {
                for ( j = i; j < len-1; j++)
                {
                    strcpy(dev[j].name,dev[j+1].name);
                    strcpy(dev[j].type,dev[j+1].type);
                    strcpy(dev[j].id,dev[j+1].id);
                    strcpy(dev[j].date,dev[j+1].date);
                    strcpy(dev[j].state,dev[j+1].state);
                }   
                printf("-----设备删除成功-----\n");
            }    
            --len;
            flag=1;
            break;
        }
    }
    if (flag==0)
    {
        printf("-----找不到该设备-----\n");
    }
    system ("pause");
    system ("cls");
    return len;
}

int add_list_dev(DEV dev[],int len) //增加设备
{
    system ("cls");
    DEV temp;
    printf("设备名称:");
    scanf("%s",temp.name);
    printf("设备类型:");
    scanf("%s",temp.type);
    printf("设备id(6位):");
    scanf("%s",temp.id);
    printf("设备购买日期:");
    scanf("%s",temp.date);
    printf("设备状态:");
    scanf("%s",temp.state);
    printf("\n");
    printf("键入需要插入的位置(输入id):");
    int pac=-1,i;
    char tar[50];
    scanf("%s",tar);
    for ( i = 0; i < len; i++)
    {
        if (strcmp(tar,dev[i].id)==0)
        {
            pac=i;
            break;
        }
    }
    if (pac!=-1)
    {
        printf("-----找到目标设备位置-----\n");
        for ( i = len; i >= pac; i--)
        {
            strcpy(dev[i].name,dev[i-1].name);
            strcpy(dev[i].type,dev[i-1].type);
            strcpy(dev[i].id,dev[i-1].id);
            strcpy(dev[i].date,dev[i-1].date);
            strcpy(dev[i].state,dev[i-1].state);
        }
        strcpy(dev[pac].name,temp.name);
        strcpy(dev[pac].type,temp.type);
        strcpy(dev[pac].id,temp.id);
        strcpy(dev[pac].date,temp.date);
        strcpy(dev[pac].state,temp.state);
        printf("-----设备增加成功-----\n");
        printf("\n");
    }
    else
    {
        printf("-----未找到目标设备位置-----\n");
        printf("-----将增添至最后一位-----\n");
        pac=len;
        strcpy(dev[pac].name,temp.name);
        strcpy(dev[pac].type,temp.type);
        strcpy(dev[pac].id,temp.id);
        strcpy(dev[pac].date,temp.date);
        strcpy(dev[pac].state,temp.state);
        printf("-----设备增加成功-----\n");
        printf("\n");
    }
    ++len;
    system("pause");
    system("cls");
    return len;
}

void sort_list_dev(DEV dev[],int len) //设备排序
{
    system ("cls");
    int i,a;
    DEV swap;
    printf("-----设备排序将由id从小到大排序-----\n"); //冒泡排序
    for ( a=0;a<len-1;a++)
    {
        for ( i = 0; i < len-1-i; i++)
        {
            if (strcmp(dev[i].id,dev[i+1].id)>0)
            {
                strcpy(swap.name,dev[i].name);
                strcpy(swap.type,dev[i].type);
                strcpy(swap.id,dev[i].id);
                strcpy(swap.date,dev[i].date);
                strcpy(swap.state,dev[i].state);
                strcpy(dev[i].name,dev[i+1].name);
                strcpy(dev[i].type,dev[i+1].type);
                strcpy(dev[i].id,dev[i+1].id);
                strcpy(dev[i].date,dev[i+1].date);
                strcpy(dev[i].state,dev[i+1].state);
                strcpy(dev[i+1].name,swap.name);
                strcpy(dev[i+1].type,swap.type);
                strcpy(dev[i+1].id,swap.id);
                strcpy(dev[i+1].date,swap.date);
                strcpy(dev[i+1].state,swap.state);
            }
        }
    }
    for ( i = 0; i < len; i++)
    {
        print(dev,i);//-----函数嵌套-----
    }
    system ("pause");
    system ("cls");
}

void print(DEV dev[],int i) //批量输出
{
    printf("设备名称:%s\n",dev[i].name);
    printf("设备类型:%s\n",dev[i].type);
    printf("设备id:%s\n",dev[i].id);
    printf("设备购买日期:%s\n",dev[i].date);
    printf("设备状态:%s\n",dev[i].state);
    printf("----------------------------------\n");
}

void classify_list_dev(DEV dev[],int len) //设备分类
{
    system ("cls");
    char printer[50]={"打印机"};
    char computer[50]={"电脑"};
    char monitor[50]={"显示器"};
    char earphone[50]={"耳机"};
    int i;
    printf("打印机组:\n");
    int flag0=0;
    for ( i = 0; i < len; i++)
    {
        if (strcmp(dev[i].type,printer)==0)
        {
            print(dev,i); //-----函数嵌套-----
            flag0=1;
        }
    }
    if (flag0==0)
    {
        printf("-----无设备-----\n");
    }
    printf("\n");
    int flag1=0;
    printf("电脑组:\n");
    for ( i = 0; i < len; i++)
    {
        if (strcmp(dev[i].type,computer)==0)
        {
            print(dev,i); //-----函数嵌套-----
            flag1=1;
        }        
    }
    if (flag1==0)
    {
        printf("-----无设备-----\n");
    }
    printf("\n");
    int flag2=0;
    printf("显示器组:\n");
    for ( i = 0; i < len; i++)
    {
        if (strcmp(dev[i].type,monitor)==0)
        {
            print(dev,i); //-----函数嵌套-----
            flag2=1;
        }     
    }
    if (flag2==0)
    {
        printf("-----无设备-----\n");
    }
    printf("\n");
    int flag3=0;
    printf("耳机组:\n");
    for ( i = 0; i < len; i++)
    {
        if (strcmp(dev[i].type,earphone)==0)
        {
            print(dev,i); //-----函数嵌套-----
            flag3=1;
        }        
    }
    if (flag3==0)
    {
        printf("-----无设备-----\n");
    }
    system ("pause");
    system ("cls");
}

void sata_list(DEV dev[],int len) //设备统计
{
    system ("cls");
    int cnt0=0,cnt1=0;
    int i;
    printf("设备总数:%d\n",len);
    for ( i = 0; i < len; i++)
    {
        if (strcmp(dev[i].state,"好")==0)
        {
            ++cnt0;
        }
    }
    for ( i = 0; i < len; i++)
    {
        if (strcmp(dev[i].state,"差")==0)
        {
            ++cnt1;
        }
    }
    printf("设备状态为良好的设备数:%d\n",cnt0);
    printf("设备状态为差的设备数:%d\n",cnt1);
    system ("pause");
    system ("cls");
}

void write_list(DEV dev[],int len) //导出文件
{
    int i;
    system ("cls");
    FILE *fp1;fp1=fopen("len.txt","w+");
    fwrite(&len,sizeof(int),1,fp1);
    FILE *fp;fp=fopen("data.txt","w+");
    for ( i=0; i<len; i++)
    {
        fwrite(&dev[i],sizeof(DEV),1,fp);
    }
    fclose(fp);
    fclose(fp1);
    printf("-----导出成功-----\n");
    system ("pause");
    system ("cls");
}

int read_list(DEV dev[])  //导入文件
{
    system("cls");
    int i,len;
    FILE *fp1;fp1=fopen("len.txt","r"); //-----使用指针-----
    FILE *fp;fp=fopen("data.txt","r"); //-----使用指针-----
    fread(&len,sizeof(int),1,fp1);
    for ( i = 0; i < len; i++)
    {
        fread(&dev[i],sizeof(DEV),1,fp);
    }
    if (strcmp(dev[0].id,"0")!=0)
    {
        printf("-----文件导入成功-----\n");
    }
    else
    {
        printf("-----文件导入失败-----\n");
    } 
    system ("pause");
    system ("cls");
    return len;
}

五.注意事项:

1.Id必须输入六位,不然在设备排序中会出现错误

设备类型有:打印机,电脑,显示器,耳机

设备状态有:好,坏

2.文件导出后必须输入11来退出程序,直接退出会导致len无法正确导出到len.txt


本文转载自: https://blog.csdn.net/Z__ZBC__/article/details/128737536
版权归原作者 Z__ZBC__ 所有, 如有侵权,请联系我们删除。

“C语言程序实训--实验设备管理系统”的评论:

还没有评论