C语言结课设计——实验设备管理系统文档(附带代码)

2024-06-20 1579阅读

目录

程序设计技术课程设计

1 绪论

1.1 研究的目的及意义

2需求分析

2.1 关键问题

2.2 拟采用解决问题的方法

3总体设计

3.1 模块设计

3.2 数据存储设计

4系统实现

4.1 开发环境

4.2 录入设备模块功能设计及实现

4.3 输出设备模块功能设计及实现

4.4 查询设备模块设计及实现

4.5 修改设备模块设计及实现

4.6 删除设备模块设计及实现

4.7 主用户界面模块设计及实现

5系统测试

5.1 测试内容

5.2 测试结果

6小结

6.1 程序实现小结

6.2 尚未解决的问题及下一步工作思路

附  录

1 绪论

1.1 研究的目的及意义

面对日益增多的实验教学需求,古老的人工管理方式和人工预约方式受到了强烈的冲击,更加简便、清晰、规范的实验室管理系统也应运而生。 通过使用实验室管理系统实现高校实验室、实验仪器与实验耗材管理的规范化、信息化;提高实验教学特别是开放实验教学的管理水平与服务水平;为实验室评估、实验室建设及实验教学质量管理等决策提供数据支持;智能生成每学年教育部数据报表,协助高校轻而易举完成数据上报工作。

2需求分析

2.1 关键问题

在使用C语言完成实验设备管理系统时,因为需要实现增删改查的功能,所以在编写代码时遇到了以下的问题:

  1. 整个代码需要采用模块化的设计,所以在设计模块化系统时,需要合理划分各个模块,将功能相近的代码封装到一个模块中,但是在实际操作中,可能会遇到模块划分不清晰的问题。
  2. 代码设计中,用户主界面需要与其他功能相联系,从而实现通过用户界面快捷使用系统的功能,但用什么代码形式来实现这种功能,需要设计。
  3. 数据结构设计:需要设计适合存储设备信息的数据结构,如链表、数组或树等。这需要考虑到设备的属性和关系,以便实现方便的增删改查操作。

2.2 拟采用解决问题的方法

1.解决模块化问题时,运用模块化思想,将整个系统的功能分为多个板块,即:录入,输出(显示),查询,修改,删除以及主界面等6个板块,并使用不同函数来表示不同功能,使整个系统更加清晰。

2.为了实现主界面与各种功能的联系,我采用switch函数来实现。

3.关于数据结构的设计,我使用结构体数组与全局变量来完成,我先定义设备结构体包括设备id等等,然后定义全局变量devicecount来实现设备数量这一数据的共享。

3总体设计

3.1 模块设计

重庆城市科技大学实验设备管理系统总共分为六大模块,分别为录入,输出,查询,修改,删除以及主界面,系统功能结构图如图3.1。

C语言结课设计——实验设备管理系统文档(附带代码)

图3.1 重庆城市科技大学实验设备管理系统功能结构图

3.2 数据存储设计

针对数据存储的设计,可以使用链表,结构体,数组,树,图,队列以及栈,但我能熟练使用的使结构体和数组,所以在实现重庆城市科技大学实验设备管理系统的数据存储设计时,我采用了结构体和数组的方式来存储数据,具体如下:

首先,定义了一个结构体Device,用来储存设备信息,包含了设备的名称、ID和类型。然后定义了一个全局变量devices(Device数组),它可以存储多个设备的信息,当然我设置的“多个”的上限为100个,即MAXSHEBEI = 100。又因为这个系统要存储已经录入设备的信息,所以需要另外一个全局变量numDevice来存储已录入的设备信息

4系统实现

4.1 开发环境

开发工具: vscode

开发语言: C语言

开发平台:Windows 11

数据库:

4.2 录入设备模块功能设计及实现

这是对实验设备进行录入的模块功能设计,该模块的程序流程图如图4.1。

C语言结课设计——实验设备管理系统文档(附带代码)

图4.1录入功能流程图

录入功能难点在于存储录入的设备信息,运用数组和结构体可以实现存储,同时也可以使信息共享。

4.3 输出设备模块功能设计及实现

输出设备功能,即将录入模块中存储的数据输出出来,该模块的程序流程图如图4.3。

C语言结课设计——实验设备管理系统文档(附带代码)

图4.3 输出设备模块流程图

输出功能较为简单,重点在于使用for循环来遍历数组,找寻录入模块的信息,并使其依次打印出来

4.4 查询设备模块设计及实现

查询设备的功能带入找东西的思维,首先需要设定一个锚点found,我们可以通过输入关键字来进行匹配,再通过for循环遍历设备列表查询,使用strstr函数来实现输入的关键字与锚点的配对,配对成功则输出设备信息,失败则输出未找到匹配设备,流程图如图4.13。

C语言结课设计——实验设备管理系统文档(附带代码)

图4.13 查询设备模块流程图

4.5 修改设备模块设计及实现

与查询功能模块相似,修改设备模板也需要使用for循环遍历设备列表来找到要修改的设备,再对设备信息进行修改。该模块的程序流程图如图4.14

C语言结课设计——实验设备管理系统文档(附带代码)

图4.14 修改设备模块流程图

4.6 删除设备模块设计及实现

与修改设备模块相似,只需将修改部分的代码修改为删除的代码即可,其中删除的代码思路为:遍历设备列表找到要删除的设备,找到后则让要删除设备后面的设备依次向前移动一个位置,使删除设备的信息被其后面的设备覆盖,达到删除效果。

模块代码如下:

//删除功能函数
void deleteDevice() {
    int deviceId;
    printf("请输入要删除的设备编号:");
    scanf("%d", &deviceId);
    
    int i,found = 0;
    for (i = 0; i  
 

4.7 主用户界面模块设计及实现

主用户界面模块需要将前面5个功能模块连在一起,可用switch函数来进行设计,代码如下:

//主界面主函数
int main() {
    int choice;
    //进入一个无限循环,直到用户选择退出操作。
    //用户主界面
    while (1) {
        printf("****************** 重大城科实验设备管理系统 ******************\n");
        printf("            请选择操作:\n");
        printf("            1. 设备录入\n");
        printf("            2. 设备输出\n");
        printf("            3. 设备查询\n");
        printf("            4. 设备修改\n");
        printf("            5. 设备删除\n");
        printf("            0. 退出\n");
        printf("***********************************************************\n");
        printf("请输入操作编号:");
        scanf("%d", &choice);
        //通过switch函数实现增删改查
        switch (choice) {
            case 1:
                addDevice();
                break;
            case 2:
                printDevices();
                break;
            case 3:
                searchDevice();
                break;
            case 4:
                modifyDevice();
                break;
            case 5:
                deleteDevice();
                break;
            case 0:
                printf("感谢使用!\n");
                break;
            default:
                printf("无效的操作编号!\n");
                break;//使操作者的输入选项固定在0~5之间
        }
        printf("\n");
    }
    return 0;
}

5系统测试

5.1 测试内容

C语言结课设计——实验设备管理系统文档(附带代码)

5.2 测试结果

C语言结课设计——实验设备管理系统文档(附带代码)

C语言结课设计——实验设备管理系统文档(附带代码)

C语言结课设计——实验设备管理系统文档(附带代码)C语言结课设计——实验设备管理系统文档(附带代码)

6小结

6.1 程序实现小结

通过本次对实验设备管理系统的程序设计,我基本实现了该系统的目标功能,也强化了自身模块化思维的掌握,同时也巩固了结构体,数组以及函数等C语言知识。而通过编写该系统,也使我对于程序设计有了更深的体验,包括思考代码的编写思路,逻辑等。

6.2 尚未解决的问题及下一步工作思路

问题:

对于程序的问题,此次编写程序时,在数据存储设计方面,对于链表的实际运用不理解,从而使用结构体和数组来解决,也时在存储数据的代码编写过程中浪费了很多精力,所以对于链表的掌握需要加紧。

此次在实现程序的过程中,对于我在自己来说,面对代码的编写还有许多的知识漏洞,即使思考出了功能的实现逻辑,也没有足够的程序知识来支撑,导致编写程序的过程中,问题频发,不得不借用网络去查找对应的知识点,这也是面对一个简单的程序设计,却需要我用很多的时间来完成。

下一步:

通过自学完成对链表的了解,掌握,运用,之后通过链表的方式再一次实现该系统程序。

附  录

程序完整代码:

#include 
#include 
#define MAXSHEBEI 100//定义一个常量用来表示设备的最大数量
struct Device {
    char name[50];
    int id;
    char type[20];
};//定义一个结构体Device,用来储存设备信息,它包含了设备的名称、ID和类型。
struct Device devices[MAXSHEBEI];//接着定义一个全局变量devices,用于存储多个设备的信息。
int numDevices = 0;//全局变量,用于记录当前已经存储的设备数量。
//录入功能函数
void addDevice() {
    if (numDevices >= MAXSHEBEI) {
        printf("设备数量已达上限!\n");
        return;
    }//防止录入设备过多,先检查设备的录入数量是否已经达到最大数量,即MAXSHEBEI的定义值
    
    struct Device newDevice;//定义结构体变量newDevice来存储设备信息
    printf("请输入设备名称:");
    scanf("%s", newDevice.name);
    printf("请输入设备编号:");
    scanf("%d", &newDevice.id);
    printf("请输入设备类型:");
    scanf("%s", newDevice.type);
    //将输入信息存储到newDevice中
    devices[numDevices] = newDevice;
    numDevices++;
    //将newDevice添加到 devices数组中的第numDevices个位置,并将numDevices加1,表示设备数量增加了一个。  
    printf("设备录入成功!\n");
}
//输出功能函数
void printDevices() {
    if (numDevices == 0) {
        printf("暂无设备信息!\n");
        return;
    }//用于表示没有设备信息时的情况
    int i;
    printf("设备列表:\n");
    for (i = 0; i  
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]