以后要搞C了先自己练习一下,系统本身没有太大的实际用途,只是用来磨练编程规范,不足之处还望大家多多指正 。互相交流共同进步。
为了方便只使用了一个 book.c 文件,在vc6 下编译通过,其他编译器还没试过
文件链接 : https://files.cnblogs.com/GhostZCH/Book.rar
顺便贴出代码
1
1 /************************************************************************/
2 /* */
3 /* 该文件是一个模拟的图书借还系统,通过命令行操作 */
4 /* */
5 /* 命令: */
6 /* 1. 重启: reboot */
7 /* 2. 查询: query [book number] 例:query 1000 */
8 /* 3. 借书: borrow [book number] 例:borrow 1000 */
9 /* 4. 还书: return [book number] 例:return 1000 */
10 /* 5. 历史: history [book number] 例:history 1000 */
11 /* */
12 /* 备注: */
13 /* 1. 正确的图书编号 [1000, 1009] */
14 /* 2. query 和 history 命令使用参数 0 查询所有记录 例:query 0 */
15 /* 3. vc6.0 编译通过 */
16 /* */
17 /* 作者: Ghost */
18 /* 主页: http://www.cnblogs.com/GhostZCH */
19 /* */
20 /************************************************************************/
21
22 #include <stdio.h>
23 #include <stdlib.h>
24 #include <string.h>
25 #include <MATH.H>
26 #include <TIME.H>
27
28 /************************************************************************/
29 /* 基础数据定义 */
30 /************************************************************************/
31
32 #define MAX_MSG_LEN 100
33 #define MAX_CMD_TMP_LEN 100
34 #define MAX_BOOK_NAME_LEN 30
35 #define MAX_BOOK_COUNT 10
36 #define MIN_BOOK_NUMBER 1000
37 #define MAX_BOOK_NUMBER MIN_BOOK_NUMBER + MAX_BOOK_COUNT - 1
38 #define DEFAULT_BOOK_ID 0
39
40 // 生成消息集合相关的宏定义
41 #define END_ID_OF_MSG_SET -1
42 #define BEGIN_MSG_SET MSG_INFO g_szMsg[] = {
43 #define ADD_MSG(ID,MSG_STR) {ID,MSG_STR},
44 #define END_MSG_SET {END_ID_OF_MSG_SET,""}};
45
46 typedef unsigned char UINT8;
47 typedef unsigned int BookNumber;
48
49 // 系统时间格式
50 typedef struct tagSysTime
51 {
52 UINT8 nHour;
53 UINT8 nMin;
54 UINT8 nSec;
55 }SYS_TIME;
56
57 // 布尔值
58 typedef enum emBoolVal
59 {
60 TRUE,
61 FALSE
62 }BOOL;
63
64 // 图书状态
65 typedef enum emBookState
66 {
67 BOOK_IN,
68 BOOK_OUT
69 }BOOK_STATE_EM;
70
71 // 图书操作
72 typedef enum emBookOption
73 {
74 BOOK_OP_IN,
75 BOOK_OP_OUT
76 }BOOK_OP_EM;
77
78 // 消息ID 系统通过该ID打印消息
79 typedef enum emMsgID
80 {
81 MSG_SYS_INNER_ERROR = 0 , /* 内部错误 */
82 MSG_SYS_INIT_SUCCESS = 1 , /* 初始化成功 */
83 MSG_SYS_BAD_CMD = 2 , /* 命令错误 */
84 MSG_BOOK_BAD_ID = 11, /* 图书编号错误 */
85 MSG_BOOK_NOT_IN = 12, /* 图书已经外借 */
86 MSG_BOOK_NOT_OUT = 13, /* 图书没有外借 */
87 MSG_BOOK_BRW_SCS = 14, /* 图书外借成功 */
88 MSG_BOOK_RTN_SCS = 15, /* 图书归还成功 */
89 MSG_BOOK_NOT_HAS = 16, /* 无该书信息 */
90 MSG_BOOK_QRY_SCS = 17, /* 图书查询成功 */
91 MSG_BOOK_HIS_SCS = 18 /* 历史查询成功 */
92 }MSG_ID_EM;
93
94 // 消息结构体
95 typedef struct tagMsgInfo
96 {
97 MSG_ID_EM emID;
98 char szMessage[MAX_MSG_LEN];
99 }MSG_INFO;
100
101 // 图书信息
102 typedef struct tagBookInfo
103 {
104 BookNumber nNum;
105 BOOK_STATE_EM emState;
106 char szName[MAX_BOOK_NAME_LEN + 1];
107 } BOOK_INFO;
108
109 // 图书节约历史信息
110 typedef struct tagBookHistInfo
111 {
112 BOOK_INFO *pstBookInfo ;
113 BOOK_OP_EM emBookOption;
114 SYS_TIME stOptionTime;
115 }BOOK_HIS_INFO;
116
117 // 图书节约历史信息的链表节点
118 typedef struct tagBookHisNode
119 {
120 BOOK_HIS_INFO stBookHisInfo;
121 struct tagBookHisNode *pstNext;
122 }BOOK_HIS_NODE;
123
124 // 生成消息集,供系统按ID打印消息
125 BEGIN_MSG_SET
126 ADD_MSG(MSG_SYS_INNER_ERROR , "内部错误" )
127 ADD_MSG(MSG_SYS_INIT_SUCCESS, "初始化成功" )
128 ADD_MSG(MSG_SYS_BAD_CMD , "命令错误" )
129 ADD_MSG(MSG_BOOK_BAD_ID , "图书编号错误")
130 ADD_MSG(MSG_BOOK_NOT_IN , "图书已经外借")
131 ADD_MSG(MSG_BOOK_NOT_OUT , "图书没有外借")
132 ADD_MSG(MSG_BOOK_BRW_SCS , "图书外借成功")
133 ADD_MSG(MSG_BOOK_RTN_SCS , "图书归还成功")
134 ADD_MSG(MSG_BOOK_NOT_HAS , "无该书信息" )
135 ADD_MSG(MSG_BOOK_QRY_SCS , "图书查询成功")
136 ADD_MSG(MSG_BOOK_HIS_SCS , "历史查询成功")
137 END_MSG_SET
3 /* 该文件是一个模拟的图书借还系统,通过命令行操作 */
4 /* */
5 /* 命令: */
6 /* 1. 重启: reboot */
7 /* 2. 查询: query [book number] 例:query 1000 */
8 /* 3. 借书: borrow [book number] 例:borrow 1000 */
9 /* 4. 还书: return [book number] 例:return 1000 */
10 /* 5. 历史: history [book number] 例:history 1000 */
11 /* */
12 /* 备注: */
13 /* 1. 正确的图书编号 [1000, 1009] */
14 /* 2. query 和 history 命令使用参数 0 查询所有记录 例:query 0 */
15 /* 3. vc6.0 编译通过 */
16 /* */
17 /* 作者: Ghost */
18 /* 主页: http://www.cnblogs.com/GhostZCH */
19 /* */
20 /************************************************************************/
21
22 #include <stdio.h>
23 #include <stdlib.h>
24 #include <string.h>
25 #include <MATH.H>
26 #include <TIME.H>
27
28 /************************************************************************/
29 /* 基础数据定义 */
30 /************************************************************************/
31
32 #define MAX_MSG_LEN 100
33 #define MAX_CMD_TMP_LEN 100
34 #define MAX_BOOK_NAME_LEN 30
35 #define MAX_BOOK_COUNT 10
36 #define MIN_BOOK_NUMBER 1000
37 #define MAX_BOOK_NUMBER MIN_BOOK_NUMBER + MAX_BOOK_COUNT - 1
38 #define DEFAULT_BOOK_ID 0
39
40 // 生成消息集合相关的宏定义
41 #define END_ID_OF_MSG_SET -1
42 #define BEGIN_MSG_SET MSG_INFO g_szMsg[] = {
43 #define ADD_MSG(ID,MSG_STR) {ID,MSG_STR},
44 #define END_MSG_SET {END_ID_OF_MSG_SET,""}};
45
46 typedef unsigned char UINT8;
47 typedef unsigned int BookNumber;
48
49 // 系统时间格式
50 typedef struct tagSysTime
51 {
52 UINT8 nHour;
53 UINT8 nMin;
54 UINT8 nSec;
55 }SYS_TIME;
56
57 // 布尔值
58 typedef enum emBoolVal
59 {
60 TRUE,
61 FALSE
62 }BOOL;
63
64 // 图书状态
65 typedef enum emBookState
66 {
67 BOOK_IN,
68 BOOK_OUT
69 }BOOK_STATE_EM;
70
71 // 图书操作
72 typedef enum emBookOption
73 {
74 BOOK_OP_IN,
75 BOOK_OP_OUT
76 }BOOK_OP_EM;
77
78 // 消息ID 系统通过该ID打印消息
79 typedef enum emMsgID
80 {
81 MSG_SYS_INNER_ERROR = 0 , /* 内部错误 */
82 MSG_SYS_INIT_SUCCESS = 1 , /* 初始化成功 */
83 MSG_SYS_BAD_CMD = 2 , /* 命令错误 */
84 MSG_BOOK_BAD_ID = 11, /* 图书编号错误 */
85 MSG_BOOK_NOT_IN = 12, /* 图书已经外借 */
86 MSG_BOOK_NOT_OUT = 13, /* 图书没有外借 */
87 MSG_BOOK_BRW_SCS = 14, /* 图书外借成功 */
88 MSG_BOOK_RTN_SCS = 15, /* 图书归还成功 */
89 MSG_BOOK_NOT_HAS = 16, /* 无该书信息 */
90 MSG_BOOK_QRY_SCS = 17, /* 图书查询成功 */
91 MSG_BOOK_HIS_SCS = 18 /* 历史查询成功 */
92 }MSG_ID_EM;
93
94 // 消息结构体
95 typedef struct tagMsgInfo
96 {
97 MSG_ID_EM emID;
98 char szMessage[MAX_MSG_LEN];
99 }MSG_INFO;
100
101 // 图书信息
102 typedef struct tagBookInfo
103 {
104 BookNumber nNum;
105 BOOK_STATE_EM emState;
106 char szName[MAX_BOOK_NAME_LEN + 1];
107 } BOOK_INFO;
108
109 // 图书节约历史信息
110 typedef struct tagBookHistInfo
111 {
112 BOOK_INFO *pstBookInfo ;
113 BOOK_OP_EM emBookOption;
114 SYS_TIME stOptionTime;
115 }BOOK_HIS_INFO;
116
117 // 图书节约历史信息的链表节点
118 typedef struct tagBookHisNode
119 {
120 BOOK_HIS_INFO stBookHisInfo;
121 struct tagBookHisNode *pstNext;
122 }BOOK_HIS_NODE;
123
124 // 生成消息集,供系统按ID打印消息
125 BEGIN_MSG_SET
126 ADD_MSG(MSG_SYS_INNER_ERROR , "内部错误" )
127 ADD_MSG(MSG_SYS_INIT_SUCCESS, "初始化成功" )
128 ADD_MSG(MSG_SYS_BAD_CMD , "命令错误" )
129 ADD_MSG(MSG_BOOK_BAD_ID , "图书编号错误")
130 ADD_MSG(MSG_BOOK_NOT_IN , "图书已经外借")
131 ADD_MSG(MSG_BOOK_NOT_OUT , "图书没有外借")
132 ADD_MSG(MSG_BOOK_BRW_SCS , "图书外借成功")
133 ADD_MSG(MSG_BOOK_RTN_SCS , "图书归还成功")
134 ADD_MSG(MSG_BOOK_NOT_HAS , "无该书信息" )
135 ADD_MSG(MSG_BOOK_QRY_SCS , "图书查询成功")
136 ADD_MSG(MSG_BOOK_HIS_SCS , "历史查询成功")
137 END_MSG_SET
2
1 /************************************************************************/
2 /* 界面显示 API */
3 /************************************************************************/
4
5 char g_szTimeStamp[10]; // 系统打印时间的用的字符串
6
7 char *g_szBookStateString[3] = {"库存","外借","其他"}; // 图书状态的字符串
8
9 char *g_szBookOptionString[2] = {"借出","归还"}; // 图书操作的字符串
10
11 //********************************************
12 // Method : GetLocalTime
13 // Description : 将时间戳打印到 g_szTimeStamp
14 // Returns : BOOL 是否打印成功
15 //*******************************************
16 BOOL GetLocalTime()
17 {
18 time_t ulTime ;
19 struct tm *stTime = NULL;
20 char *pcTimeStr = NULL;
21
22 time(&ulTime);
23 stTime = localtime(&ulTime); // 此处根据系统原理,不会返回空指针,故不作检测
24
25 sprintf(g_szTimeStamp, "%02d:%02d:%02d", stTime->tm_hour, stTime->tm_min, stTime->tm_sec);
26 g_szTimeStamp[9] = '
3 /************************************************************************/
4
5 char g_szTimeStamp[10]; // 系统打印时间的用的字符串
6
7 char *g_szBookStateString[3] = {"库存","外借","其他"}; // 图书状态的字符串
8
9 char *g_szBookOptionString[2] = {"借出","归还"}; // 图书操作的字符串
10
11 //********************************************
12 // Method : GetLocalTime
13 // Description : 将时间戳打印到 g_szTimeStamp
14 // Returns : BOOL 是否打印成功
15 //*******************************************
16 BOOL GetLocalTime()
17 {
18 time_t ulTime ;
19 struct tm *stTime = NULL;
20 char *pcTimeStr = NULL;
21
22 time(&ulTime);
23 stTime = localtime(&ulTime); // 此处根据系统原理,不会返回空指针,故不作检测
24
25 sprintf(g_szTimeStamp, "%02d:%02d:%02d", stTime->tm_hour, stTime->tm_min, stTime->tm_sec);
26 g_szTimeStamp[9] = '