南京工程学院
实 验 报 告
课 程 名 称
人机交互
实验项目名称 命令行菜单界面的设计
实验学生班级
软件 161
实验学生姓名
学
号
202
同组学生姓名
实 验 时 间 2 0 1 8 . 1 2 . 2 0
实 验 地 点
图书馆
实验成绩评定
指导教师签字
年 月 日
一、实验目的和要求
实验目的:
1、要求同学掌握命令行菜单界面设计及实现方法。
2、在2学时的上机时间内,调试完成题目,通过调试程序,进一
步加深交互设计思想。
3、对问题能够通过分析,理解交互设计的设计及评估特性,使得
界面更符合以用户为中心的原则。
实验要求:
实现编写好程序,上机调试和运行程序,分析结果。
二、实验主要仪器和设备
Windows10 计算机
Dev-C++软件
三、实验方法与步骤(需求分析、算法设计思路、流程图等)
1.命令行菜单界面简介
命令行界面(英语:command-line interface,缩写:CLI)
是在图形用户界面得到普及之前使用最为广泛的用户界面,它通
常不支持鼠标,用户通过键盘输入指令,计算机接收到指令后,
予以执行。也有人称之为字符用户界面(CUI)。
随着科学技术的发展,图形用户界面愈加兴盛,然而命令行
菜单界面仍然被使用,许多命令行界面仍拥有几个胜过图形用户
界面的优势。它们在超级用户、程序员以及系统管理员中间很流
行。
2.实验主题
使用 C 语言程序编写一个图书管理系统,以 C 语言运行的命
令行菜单界面来分析命令行界面的优缺点。对问题能够通过分析,
理解交互设计的设计及评估特性,使得界面更符合以用户为中心
的原则。
图书馆管理系统包括:
●录入:新进图书及基本信息输入
●删除:旧图书及基本信息删除
●查询:查询要借阅的图书信息
●修改:修改已有的图书信息
●借书:实现用户办理借书手续
●还书:实现用户.办理还书手续
系统以菜单方式工作,界面友好,易于操作。
四、实验原始纪录(源程序、数据结构等)
主要源程序:
#include
#include
#include
#define AVAILABLE 0
#define UNAVAILABLE 1
#define MAXNAME 30
#define CLEAR "cls"
typedef struct book{
char *name;
int id;
int count;
int status;
struct book *next;
}Book;
void welcome();
void error(char *);
// [异常提醒]
char land();
// [主页面项目]
int usrstudent();
// [学生入口]返回 0 表示返回主页 1 表示继续执行本函数
int usrmanager();
// [管理员入口]返回 0 表示返回主页 1 表示继续执
行本函数
int viewbook();
// [查看图书]返回打印的图书个数
失败返回-1
int addbook();
// [注册图书]添加图书成功 返回图书 id 失败返
回-1
int modbook();
// [修改图书]修改图书信息 成功后返回 id 失
败 -1
int delbook();
// [注销图书]删除成功 返回被删除图书的 id 失败
返回-1
void printbook(Book *);
// [打印图书]
Book *lookup(char *, int);
// [搜索图书]
int borrowbook();
// [借阅图书]
int returnbook();
// [归还图书]
Book *head = NULL;
int nbook = 0;
int main(){
welcome();
return 0;
}
void welcome(){
printf("************************* 欢 迎 使 用 图 书 管 理 系 统
*************************\n");
while(1){
printf("-------------------------------------\n");
printf("请输入项目前编号执行相关操作:\n");
printf("\n[1] 管理员入口\n\n[2] 学生入口\n\n[0] 退出\n\n");
switch(land()){
case '1':
while(1){
if(usrmanager()){
continue;
}else{
break;
}
}
break;
......
void printbook(Book *bp){
printf("图书编号:%d\n", bp->id);
printf("图书名:%s\n", bp->name);
printf("图书存数:%d\n", bp->count);
printf("图书状态:%s\n", bp->status ? "不可借" : "可借");
}
......
int delbook(){
system(CLEAR);
///////////////////////////////////////////
Book *bp, *fbp;
int id = 0;
printf("请输入要注销的图书编号:\n");
scanf("%d", &id);
getchar();
if(!(id > 0 && id < 1000)){
fflush(stdin);
error("图书编号不符合要求");
return -1;
}
for(fbp = bp = head; bp != NULL; fbp = bp, bp = bp->next){
if(bp->id == id){
printbook(bp);
break;
}
}
if(bp != NULL){
while(1){
printf("确定要注销此图书:Y
N\n");
char YN;
scanf("%c", &YN);
getchar();
if(!((YN == 'Y' || YN == 'y') || (YN == 'N' || YN == 'n'))){
fflush(stdin);
error("指令无效\n");
continue;
}
if(YN == 'Y' || YN == 'y'){
bp == head ? head = bp->next : (fbp->next = bp->next);
free(bp->name);
free(bp);
bp = NULL;
printf("图书注销成功\n");
break;
}else{
printf("放弃注销\n");
return 0;
}
}
return id;
}else{
printf("要注销的图书编号不存在\n");
return -1;