《C语言程序》课程设计 图书管理系统

时间:2024.3.31

《C语言程序》课程设计

报告书

设计题目:    图书管理       

专业:电子信息工程 班级:      

学生姓名:        学号:      

指导教师:                  

                     

20##年5月

 信息工程学院


目  录

摘 要 ―――――――――――――――――-02

第一章 绪论 ――――――――――――――-04

第二章 问题定义(或系统分析)―――――----05

第三章 总体设计与详细设计 ―――――――--07

第四章 编码实现―――――――-――--―---09

第五章 调试与测试 ―――――――――――-11

总结与心得 ――――――――――――――--12

附录:

1源代码――――――――――――――――--13

2参考资料―――――――――――――――--23

摘  要

当今计算机应用在生活中可以说是无处不在,因此作为二十一世纪的大学生来说掌握程序开发技术是十分重要的.而C语言又是最常见的,功能最强大的一种语言.因此,做好C语言课程设计是非常必要的.课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程。从拿到题目到完成整个编辑的几个星期里,不仅巩固了以前学过的知识,还可以学到很多新的东西。

我做的图书资料管理系统,虽然是一个小程序,但对我这样一初学者来说确实是一个很大的困难,以至于好几节课程设计下来还是没什么太大的进展。在图书管理系统中,要为每一个借阅者建立一个帐户,并给借阅者发放借阅卡,帐户中存储借阅者的个人信息,借阅信息,以及预定信息。持有借阅卡的借阅者可以借阅书刊,反还书刊,查询书刊信息,预定书刊并取消预定,但这些操作都是通过图书管理员进行的,即借阅者不直接与系统交互,而是图书管理员充当借阅者的代理与系统交互。在借阅书刊时,需要输入所借阅的书刊的名字,书刊的ISBN/ISSN号,然后输入借阅者的图书卡号和借阅者名,完成后提交所添表格,系统验证借阅者是否有效,若有效,借阅请求被接受,系统查询数据库系统,看借阅者所借阅书刊是否存在,若存在,则借阅者可以借阅书刊,建立并在系统中存储借阅记录。借阅者还书后,删除关于所还书刊的借阅记录。如果借阅者所借阅的书刊已被借出,借阅者还可以预定该书,一旦借阅者预定的书刊可以获得,就将书刊直接寄给预定人。

    这个程序主要考察了学生对结构体,指针,文件的操作,以及C语言算法的掌握,所以完成此道题目要求较强的设计能力,尤其是一种大局意识。如何调试程序也非常重要,通过这个程序可以学到以前调试短程序没有的的经验。

【关键字】

1图书管理       2图书查找      3图书借还      4图书的新增与修改

第一章   绪论

1.1选题背景

随着社会的发展及知识经济时代的到来,管理信息系统在各行各业发挥着越来越重要的作用。但在高校的图书管理中,避免了手工操作而带来的一些不必要的问题。

1.2系统目标

本系统的目标是将高校图书管理工作实现计算机管理,从而大幅度提高工效率,提高实施管理的准确性、科学性;使担负管理的工作人员从繁杂的手工劳作中解脱出来,更好实施针对图书借阅管理在手工操作遇到的问题。

1.3系统目的

   通过本项课程设计,可以培养独立思考、 综合运用所学有关相应知识的能力,能更好的巩固《C语言程序设计》课程学习的内容,掌握工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!更加了解了c语言的好处和其可用性!同时增加了同学之间的团队合作精神!更加也体会到以后在工作中团队合作的重要性和必要性!

第二章问题定义(或系统分析)

2.1题目分析
一、目的要求

    本课程设计任务的目的是要求学生按照分析、设计、编码、调试和测试的软件开发过程独立完成管理系统设计,以及C语言算法的掌握,并能最终实现本系统的功能要求,通过这个程序可以学习到以前调试短程序没有的的经验。

【题目要求】

  (1)为各项操作功能设计一个菜单。应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目;

  (2)要求以上功能分别用函数实现。并要求用C语言的文件操作语句将以上所有结果保存在文件XX.out。

【输入/输出要求】

  (1)应用程序运行后,先显示一个菜单,然后用户根据需要选择相应的操作项目。进入每个操作后,根据程序的提示输入相应的信息;

  (2)要求用户输入数据时,要给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等。菜单中的每一个选项都对应一个子程序,子程序的算法几乎囊获了所有C语言学过的技巧。

目前社会管理系统发展飞快,教务管理信息系统也是有了很大的发展。本系统完全独立开发,力求使系统功能简明,但功能全易操作。它适应了时代发展,适应了我国教育深化改革、全面实施素质教育的需要;从技术角度分析,这项开发工作所涉及的专业技术如下:操作系统采用Windows 2000以上的版本;在数据管理系统上,我们可采用了Microsoft Office Access,开发工具选用Microsoft Visual Basic .NET2003;从经济角度分析, 采用计算机管理不但可以提高工作效率,而且还可以节省人力、物力、财力,降低了人工处理产生的错误

第三章 总体设计与详细设计

图书数据书号,书名,作者,出版时间,价格,册数,页数

借书人信息姓名,单位,所借书目,借阅时间等

1.借书模块:输入书名

编号

借书证号(如书库中有书并且册数大于0,则进行借书,借书日期由系统时间提供)

2.还书模块:登记借书证号

进行还书操作

同时提供有无超时

有则给予罚款处理。

3.图书管理对书库中书进行管理

               新书入库

               旧书删除

               对库存量进行统计和查询

4.查询模块对书库中书进行查询

                 根据书名进行查询

               根据书号进行查询

               根据出版社进行查询

               对借阅书进行查询

               对一段时间或某书进行查询和统计

第四章 编码实现

增加图书功能,id自动排号

根据图书类型和图书状态,显示用户信息

int add_books(Book* head, Book* book_for_add)
{
    Book* p = head;
    if (!p)
        return -1;
    while (p->_next)
    {
        p = p->_next;
    };
    p->_next = book_for_add;
    book_for_add->_id = p->_id+1;
    book_for_add->_prev = p;
    book_for_add->_next = NULL;
    book_for_add->_count = 0;
    book_for_add->_status = 0;
    return 0;
};
查找书名称,返回查找到的数量,书名可能有重复的,一本书可能也有很多本,但是ID却是唯一的
int search_books_by_name(Book* book_head, char* name)
{
    int count = 0;
    Book* p = book_head;
    while (p)
    {
        if (strcmp(p->_name, name) == 0)
        {
            print_book(p);
            ++count;
        }
        p = p->_next;
    }

    return count;
}
 借书,返回该书的指针,否则就返回NULL,可能不存在图书,或者已经被借走了

 Book* borrow_books(Book* book_head, int id)
{
    Book* p = book_head;
    while (p)
    {
        if (p->_id == id)
            break;
        p = p->_next;
    }

    if (!p)/* 不存在 */
        return NULL;
 还书,正常归还就返回该书的指针,否则就返回NULL

还书要登记
 
Book* return_books(Book* book_head, int id)
{
    Book* p = book_head;
    while (p)
    {
        if (p->_id == id && p->_status != 0)
        {
            p->_status = 0;

第五章 调试与测试

运行的结果说明:

 在Visual C++ 6.0

  在此环境下运行比较好,其界面十分友好并且能正常运行。

第六章 总结与心得

首先我觉得,用到的程序段不必太高级,因为天下事皆有高低之分,决定优劣的不是集体中的某部分的强弱,起决定作用的是组合内各元素的和谐,要能在一个集体中各尽其用,每个人都能发挥自己的长处,避免自己的短处,那么这个集体的组合能量是最优的。选择什么等级的C语言就是关键,最后我决定运用文件,我的理解是;必须建立一个文件,它能够保存新的录入文挡,又能在提示语的要求下读出文档。

然而,这只是万里长征的第一步,后面的路还很长,困难还有很多,可是我能成功的编译一个程序,能够在思路卡壳的情况下,继续前进,我在此很感谢给予我耐心解答的老师和同学,是他们为我小程序的成功起到了关键性的作用,那么多个日夜,如此多的困难,同学们勤恳塌实,从开始到结束,始终热情高涨,我感谢这种氛围,感谢学校提供的良好条件。

在课程设计过程中,我学到了很多人生哲理,懂得怎么样去制定计划,怎么样去实践计划,并掌握了在执行过程中

附录 

源代码

汉字菜单的编写可参照以下代码:

#include "stdio.h"

. main()

{  char c;

   int i;

      do

      {

   clrscr();

   for(i=0;i<80;i++)

     printf("*");

     printf("\t 1: add books\n");

     printf("\t 2: list books\n");

     printf("\t 3: sreach books\n");

     printf("\t 4: borrow books\n");

     printf("\t 5: return books\n");

     printf(“\t6: exit\n”)

     printf("\t请选择输入选项[1\\2\\3\\4\\5\\6]:\n");

   do

      {

      c=getchar();

      }while(c!='1'&&c!='2'&&c!='3'&&c!='4'&&c!='5'&&!=’6’);

      getchar();

   switch(c)

     {  case '1': input(); break;

        case '2': del();   break;

        case '3': find();   break;

        case '4': arrange();  break;

        case ‘5’: right();  break;

case '6': exit(0);

     }

   printf(" 按任意键返回主菜单:\n");

   getchar();

   clrscr();

}while(1);

}

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

#define BORROWED     1
#define NOBORROW     0

/* 定义图书结构 */
struct Book
{
    int   _id;           

 // 编号,唯一
    char _name[32];   

 // 图书的名称,不唯一
    int   _type;       

// 图书的类型,不唯一
    int   _status;       

 // 图书的状态,借出/没有借出
    int   _count;       

 // 图书借出的次数
    struct Book* _next;

 // 下一本书
    struct Book* _prev;

 // 上一本书
};

/* 定义图书类型 */
typedef struct Book Book;

/* 操作的目录提示 */
char book_menu[][32] =
{
    "add books",
    "list books",
    "search books",
    "borrow books",
    "return books",
    "exit",
    "",
};
/* 操作的目录提示1 */
char book_menu_sub[][32] =
{
    "search books by name",
    "search books by type",
    "",
};

/* 添加图书类型,用户信息显示 */
char book_types[][32] =
{
    "type0",
    "type1",
    "type2",
    "",
};
/* 添加图书状态,用户信息显示 */
char book_status[][32] =
{
    "noborrow",
    "borrowed",
    "",
};

/* 增加图书,id自动排号 */
int add_books(Book* head, Book* book_for_add)
{
    Book* p = head;
    if (!p)
        return -1;
    while (p->_next)
    {
        p = p->_next;
    };
    p->_next = book_for_add;
    book_for_add->_id = p->_id+1;
    book_for_add->_prev = p;
    book_for_add->_next = NULL;
    book_for_add->_count = 0;
    book_for_add->_status = 0;
    return 0;
};

/* 建立图书管理链表 */
Book* create_list(Book* book_head)
{
    if (book_head)
    {
        book_head->_prev = book_head;
        book_head->_next = NULL;
        book_head->_id = 1;
        book_head->_count = 0;
        book_head->_status = 0;
    }
    return book_head;
}

/* 释放链表 */
void free_list(Book* book_head)
{
    Book *p, *p1;
    p = book_head;
    while(p)
    {
        p1 = p->_next;
        free(p);
        p = p1;
    }
}

/* 打印图书信息 */
void print_book(Book* book)
{
    printf("id:%d, name:%s, type:%s, status:%s, times:%d \n",
           book->_id, book->_name, book_types[book->_type],
           book_status[book->_status], book->_count);
}


/* 列出所有登记的图书 */
void list_books(Book* book_head)
{
    Book* p = book_head;
    while (p)
    {
        print_book(p);
        p = p->_next;
    }
}

/* 借书,返回该书的指针,否则就返回NULL,可能不存在图书,或者已经被借走了 */
Book* borrow_books(Book* book_head, int id)
{
    Book* p = book_head;
    while (p)
    {
        if (p->_id == id)
            break;
        p = p->_next;
    }

    if (!p)/* 不存在 */
        return NULL;

    if (p->_status != 0)

/* 已经被借走 */
        return NULL;

    p->_status = 1;

 /* 借书登记 */
    p->_count++;    

 /* 被借阅次数+1 */
    return p;
}

/* 查找书名称,返回查找到的数量,书名可能有重复的,一本书可能也有很多本,但是ID却是唯一的 */
int search_books_by_name(Book* book_head, char* name)
{
    int count = 0;
    Book* p = book_head;
    while (p)
    {
        if (strcmp(p->_name, name) == 0)
        {
            print_book(p);
            ++count;
        }
        p = p->_next;
    }

    return count;
}

/* 查找书类型,返回查找到的数量,一个类型会有很多书 */
int search_books_by_type(Book* book_head, int type)
{
    int count = 0;
    Book* p = book_head;
    while (p)
    {
        if (p->_type == type)
        {
            print_book(p);
            ++count;
        }
        p = p->_next;
    }

    return count;
}

/* 还书,正常归还就返回该书的指针,否则就返回NULL */
Book* return_books(Book* book_head, int id)
{
    Book* p = book_head;
    while (p)
    {
        if (p->_id == id && p->_status != 0)
        {
            p->_status = 0;

/* 还书登记 */
            break;
        }
        p = p->_next;
    }
    return p;
}

/* 打印操作选项 */

void print_menu(char menus[][32])
{
    int no = 0;
    printf("\nPLEASE SELECT ID LIKE 1 or 2 ..\n");
    while (strlen(menus[no]))
    {
        printf("%d   \t%s\n", no+1, menus[no]);
        ++no;
    }
    printf("OPTION(");
    while (no)
    {
        printf("/%d", no--);
    }
    printf("):");
}

/* 主函数 */
int main(void)
{
    char key = 0;
    char ss[128];
    int loop = 1;
    Book first_book, *pBooks, *pTmp;
    strcpy(first_book._name, "nihao");
    first_book._type = 0;
    pBooks = create_list(&first_book);
    while (loop)
    {
        print_menu(book_menu);
        gets(ss);
        key = ss[0] - 48;
        if(key < 0 || key > 6)
            printf("Error input !\n");
        else
            printf("INPUT:%d\n", key);
        switch (key)
        {
        case 1: // add books
            pTmp = (Book*)malloc(sizeof(Book));
            if(pTmp)
            {
                printf("Add_Book input name:");
                gets(ss);
                strncpy(pTmp->_name, ss, 31);
                print_menu(book_types);
                gets(ss);
                key = ss[0] - 48;
                if(key <= 0 || key > (sizeof(book_types)/32) )
                    key = 1;
                pTmp->_type = key - 1;
                add_books(pBooks, pTmp);
            }
            break;
        case 2: // list books
            list_books(pBooks);
            break;
        case 3: // search books
            print_menu(book_menu_sub);
            gets(ss);
            key = ss[0] - 48;
            printf("INPUT:%d\n", key);
            switch (key)
            {
            case 1: // search books by name
                printf("input book name:");
                gets(ss);
                key = search_books_by_name(pBooks, ss);
                if(key == 0)
                    printf("no found!\n");
            case 2: // search books by type
                print_menu(book_types);
                gets(ss);
                key = ss[0] - 48;
                key = search_books_by_type(pBooks, key-1);
                if(key == 0)
                    printf("no found!\n");
            default:
                break;
            }
            break;
        case 4: // borrow books
            printf("Borrow books, input book id:");
            gets(ss);
            key = atoi(ss);
            pTmp = borrow_books(pBooks, key);
            if (!pTmp)
                printf("borrow books failed: %d\n", key);
            else
            {
                printf("borrow books successful!\n");
                print_book(pTmp);
            }
            break;
        case 5: // return books
            printf("Return books, input book id:");
            gets(ss);
            key = atoi(ss);
            pTmp = return_books(pBooks, key);
            if (!pTmp)
                printf("return books failed: %d\n", key);
            else
            {
                printf("return books successful!\n");
                print_book(pTmp);
            }
            break;
        case 6: // exit
            loop = 0;
            break;
        default:
            break;
        }
        printf("--pause--");
        gets(ss);
    }
    free_list(pBooks);
    return 0;       }}

参考资料

《C程序设计语言》       机械工业出版社

《程序设计实践》        机械工业出版社

《C程序设计》           清华大学出版社

《C专家编程》           人民邮电出版社

《C程序设计语言第二版》 清华在学出版社

更多相关推荐:
c语言图书管理系统课程设计报告

合肥学院计算机科学与技术系课程设计报告20xx20xx学年第二学期课学学专指业导班教生姓程C语言课程设计图书管理系统名号级师课程设计名称20xx年6月一需求分析为了满足图书管理的要求通过计算机技术给图书管理人员...

c语言课程设计报告·图书管理系统

第一章11题目描述图书管理系统设计要求图书管理信息包括图书名称图书编号单价作者存在状态借书人姓名性别学号等试设计一图书管理系统使之能提供以下功能1新图书基本信息的输入2图书基本信息的查询3对撤销图书信息的删除4...

C语言图书管理系统课程设计报告[1]

第三章图书管理系统的设计与实现3.1系统的需求分析图书登记管理系统作为一个应用软件将为学校的老师和学生提供一个对学校图书馆深入了解并借阅、还书的平台。根据系统界面的提示信息对图书馆信息进行查询、初始化等操作系统…

c语言图书管理系统课程设计报告

沈航北方科技学院课程设计说明书课程名称教学部专业数控班级B042111学号B04211123学生姓名指导教师赵小磊20xx年6月链表实现图书信息操作田文目录摘要31绪论32系统分析321功能需求322数据需求4...

c语言图书管理系统课程设计报告

河南工业大学C语言课程设计报告20xx20xx学年第2学期课程C语言课程设计课程设计名称图书管理系统姓名晁永兵学号20xx16040220学院信息科学与工程学院专业软件工程班级2班20xx年05月04日一需求分...

C语言课程设计报告-图书管理系统

课程设计报告图书馆管理系统目录1题目与要求22系统总体设计要给出必要的文字说明及必要的图示321功能需求分析明确选题的功能需求322系统功能模块划分要给出系统功能模块图43详细设计431重要数据的数据结构设计即...

C语言图书管理系统课程设计报告

C语言图书管理系统课程设计报告引言随着社会经济的迅速发展和现代科学技术的进步,人类社会正逐渐走向现代化。计算机事业的飞速发展,使得以计算机与通信技术为基础的信息系统正处于蓬勃发展的时期。同时,随着经济文化水平的…

图书管理系统(含源代码)c语言_数据结构课程设计报告

数据结构大作业121279044伍杨数据结构大作业图书管理系统工程管理121279044伍杨目录一二三题目要求2总体设计2编码实现31定义图书结构体32登记操作43查看操作84删除操作115Main函数20四五...

C语言课程设计报告—图书信息管理系统

C语言课程设计报告图书信息管理系统设计C语言程序设计编程实践是学习C语言程序设计的一重要环节上机实习和课程设计是提高同学们程序设计能力的有效途径能够使同学们初步掌握程序设计的基本方法和调试技能学校安排上机时间有...

《C语言程序》课程设计_图书管理系统[1]

C语言程序课程设计报告书设计题目图书管理专业电子信息工程班级学生姓名学号指导教师20xx年5月信息工程学院目录摘要02第一章绪论04第二章问题定义或系统分析05第三章总体设计与详细设计07第四章编码实现09第五...

C语言图书管理系统课程设计任务书 (1)

课程设计报告课程名称C语言程序设计课题名称飞机订票专业网络工程班级学号姓名指导教师20xx年6月20日课程设计任务书课程名称C语言程序设计课题飞机订票管理系统专业班级学生姓名学号指导老师审批任务书下达日期20x...

C语言图书馆管理系统课程设计报告

C语言课程设计学生姓名袁盛升学生学号所在班级任课教师姜林10211121图书馆管理系统设计目的图书信息包括登录号书名作者名分类号出版单位出版时间价格等试设计一图书信息管理系统使之能提供以下功能1系统以菜单方式工...

c语言图书管理系统课程设计报告(26篇)