资源描述
内蒙古科技大学
本科生课程设计说明书
题 目:C语言课程设计
—— 影碟信息管理系统
学生姓名:
学 号:
专 业:
班 级:
指导教师:
46 / 48
内蒙古科技大学课程设计任务书
课程名称
C语言课程设计
设计题目
影碟信息管理系统
指导教师
时间
一、教学要求
1. 巩固和加深学生对C语言课程的基本知识的理解和掌握
2. 掌握C语言编程和程序调试的基本技能
3. 利用C语言进行基本的软件设计
4. 掌握书写程序设计说明文档的能力
5. 提高运用C语言解决实际问题的能力
二、设计资料及参数
每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。
影碟信息管理系统
图影碟息包括:电影名称、出品公司、导演姓名、主演姓名(至少2个)、上映时间、库存数量、价格等。试设计一影碟信息管理系统,使之能提供以下功能:
v 影碟信息录入功能(影碟信息用文件保存)--输入;影碟信息浏览功能--输出
v 查询或排序功能:(至少两种查询方式)--算法
●按电影名称查询 ●按主演姓名查询
v 影碟信息的插入、删除与修改
v 影碟的借出与归还
三、设计要求及成果
1. 分析课程设计题目的功能需求(可选用数组或链表实现,可多人(最多3人)协作完成一个题目)
2. 写出详细设计说明(至少包括功能实现分析和模块流程图)
3. 编写程序代码,调试程序使其能正确运行(代码书写要规范,标示符要见名知意,要有必要的注释,每人至少3个函数,每人至少200行代码,不包括注释和花括号)
4. 设计完成的软件要便于操作和使用
5. 设计完成后提交课程设计报告(请严格按照模板进行排版)
四、进度安排
第一天 选择课程设计题目,分析课题的要求
第二天 编程
第三天 编程及调试
第四天 写课程设计报告
第五天 提交课程设计报告(打印稿及电子稿)
五、评分标准
1. 根据平时上机考勤、表现和进度,教师将每天点名和检查
2. 根据课程设计完成情况,必须有可运行的软件。
3. 根据课程设计报告的质量,如有雷同,则所有雷同的所有人均判为不及格。
六、建议参考资料
1.《C语言程序设计》,谭浩强,清华大学出版社
2.《C语言程序设计课程设计》,刘振安,机械工业出版社
第一部分:程序总体设计思路 4
1.1结构体设计 4
1.2运行界面设计 4
第二部分 详细设计 9
2.1 输入模块设计 9
2.2 输出模块设计 11
2.3查找模块设计 12
2.4 借阅与归还模块设计 14
2.5 删除模块设计 18
第三部分 课程设计总结 19
附录:程序代码 20
参考文献 32
简介
由于C语言是面对过程的语言,故我的设计思路是根据目标程序
运行的过程来编写的。
程序具体设计思路如下:
程序的需求是设计影碟信息管理系统,对选修课程能够进行录入和修改操作等,要求有菜单界面和退出功能。首先如果设计一个添加函数把要录入的碟片录入一个文件中,再建立一个借阅者文件把借阅人放入其中。然后建立添加、浏览删除、查询、借阅和归还等函数,通过函数的层层调用来实现程序的逻辑结构。中间通过文件的打开和关闭实现对文件内容所包含的数据的操作。整个程序的设计思路到此结束。
开始
N
Y
请根据菜单进行选择
结束
是否退出
菜单
4.
碟片借阅归还
3.
碟片信息查询
2.
浏览碟片信息
1.
录入
碟片
信息
5.
用户信息添加
第一部分:程序总体设计思路
1.1结构体设计
数据项描述={数据项名,数据类型,长度};
影片信息={
影片ID,CHAR,10;
片名,CHAR,20;
导演,CAHR,20;
介绍,CAHR,200;
上映时间,DATE,10
};
租借记录={
记录项ID,CHAR,10;
借出时间,DATE,10;
归还时间,DATE,10;
租金,INT,4
}
1.2运行界面设计
进入主菜单
图1.1
选择1进行碟片添加
图1.2
选择2进行查询
图1.3
选择(1)碟片名查询
图1.4
选择(2)演员名查询
图1.5
选择3进行碟片借阅
图1.7
选择6进行碟片浏览
图1.8
选择4碟片归还
图1.9
选择7碟片删除
图1.10
第二部分 详细设计
2.1 输入模块设计
定义一个add添加函数添加碟片
开始
输入影碟信息
If 0==cd_number
else
以写入方式打开文件进行添加
以追加方式打开文件进行添加
cd_number++
结束
void add(void)//
{
FILE *a; //文件指针
printf("请输入碟片名称:\n");
scanf("%s",CD[cd_number].film_name);
printf("请输入出品公司:\n");
scanf("%s",CD[cd_number].film_gongsi);
printf("请输入导演姓名:\n");
scanf("%s",CD[cd_number].film_daoyan);
printf("请输入主演姓名:\n");
scanf("%s",CD[cd_number].film_zhuyan);
printf("请输入上映时间:\n");
scanf("%s",CD[cd_number].shijie);
getchar();
n = 1; //修改借阅标记
if(0==cd_number)
{
a=fopen("cd.txt","wb");
fwrite(&CD[cd_number],sizeof(struct cd),1,a);
}
else
{
a=fopen("cd.txt","ab");
fwrite(&CD[cd_number], sizeof(struct cd), 1, a);
}
cd_number++;
printf("影片添加成功\n");
getchar();
fclose(a);
}
2.2 输出模块设计
定义一个read函数浏览所有碟片信息
开始
I=0;i++
输出影碟信息
i<cd_number
结束
void read(void)
{
int i;
system("cls");
for(i=1; i<cd_number; i++)
{
printf("\n\n");
printf(" 碟片名称 :");
printf("%s\n",CD[i].film_name);
printf(" 出品公司 :");
printf("%s\n",CD[i].film_gongsi);
printf(" 导演姓名 :");
printf("%s\n",CD[i].film_daoyan);
printf(" 主演姓名 :");
printf("%s\n",CD[i].film_zhuyan);
printf(" 上映时间 :");
printf("%s\n",CD[i].shijie);
}
printf("输入任意键返回");
getch();
} scanf("%d",&n);
}
2.3查找模块设计
定义一个cheak函数从文件中查找相应的碟片信息
开始
I=0;
CD[i].film_name,cd_name==0
I++
输出影碟信息
i<cd_number
结束
void check(void)//
{
int i;
char cd_name[10];
system("cls");
printf("请要查询的输入碟片名:\n");
scanf("%s",cd_name);
printf("碟片名称 出品公司 导演姓名 主演姓名 上映时间\n");
for(i = 0; i < cd_number; i++)
{
if(strcmp(CD[i].film_name,cd_name)==0)
{
printf("%s %s %s %s %s %d\n",
CD[i].film_name,CD[i].film_gongsi,CD[i].film_daoyan,
CD[i].film_zhuyan,CD[i].shijie);
}
if(i==cd_number) printf("抱歉,不能找到。\n");
}
getchar();
getchar();
}
2.4 借阅与归还模块设计
定义一个借阅和归还函数,通过输入碟片名查找与之相符的碟片进行借阅或归还。
找到要借阅的碟片借阅
借阅
结束
开始
归还借阅的碟片,n-1
归还
void rent(void) //
{
int n;
char user_name[10];
char cd_name[10];
FILE *a;//
FILE *b;//
int k=0;
a = fopen("rent.txt","r");
b = fopen("cd.txt","r");
for (int i = 0; i < cd_number; i++)
{
fread(&CD[i], sizeof(struct cd),1,b);
}
for (i = 0; i < user_number; i++)
{
fread(&RENT[i],sizeof(struct rent),1,a);
}
printf("请输入借阅人:\n");
scanf("%s",user_name);
getchar();
printf("请输入碟片名称\n");
scanf("%s",cd_name);
getchar();
printf("请再次输入碟片名称:\n");
scanf("%s",RENT[i].film_name[k]);
k++;
getchar();
printf("已借%d张\n",k);
for (int j = 0; j < cd_number; j++)
{
if((strcmp(CD[j].film_name, cd_name))==0)
{
n=0;
}
}
printf("请输入借出日期:\n");
scanf("%d",&RENT[i].rent_time);
printf("借阅成功\n");
scanf("%d",&n);
fclose(a);
fclose(b);
}
//--------------碟片归还函数----------------------------
void returnn (void) //
{
int n;
char user_name[10];
char cd_name[10];
FILE *a;
FILE *b;
int i;
int j;
int k = 0;
a = fopen("rent.txt","r");
b = fopen("cd.txt","r");
for (i = 0; i < cd_number; i++)
fread(&CD[i], sizeof(struct cd), 1, b);
for (i = 0; i < user_number; i++)
fread(&RENT[i], sizeof(struct rent), 1, a);
printf("请输入借阅人:\n");
scanf("%s",user_name);
for (i = 0; i < user_number; i++)
{
if ((strcmp(user_name, RENT[i].username))==0)
{
printf("输入要归还的碟片名:\n");
scanf("%s",cd_name);
for (j = 0; j < cd_number; j++)
{
if((strcmp(CD[j].film_name, cd_name))==0)
{
n = 1;
break;
}
}
}
}
printf("借出日期:%d\n",RENT[i].rent_time);
printf("归还日期:\n");
scanf("%d",&RENT[i].return_time);
getchar();
if (((RENT[i].return_time - RENT[i].rent_time) % 3)==0)
RENT[i].money = (RENT[i].return_time - RENT[i].rent_time) / 3;
else
RENT[i].money = (RENT[i].return_time - RENT[i].rent_time) / 3 + 1;
printf("租金:%d\n",RENT[i].money);
scanf("%d",&n);
fclose(a);
fclose(b);
}
2.5 删除模块设计
通过定义一个Delete删除函数进行删除,首先从文件中查找到与之对应的信息后面的覆盖到前面进行删除。
开始
i<cd_number
删除影碟信息
I=0;
CD[i].film_name,cd_name==0
I++
结束
void shanchu(void)
{
int i,j,key;
char cd_name[10];
system("cls");
printf("请输入要删除的碟片:");
scanf("%s",&cd_name);
if(cd_name==0) return;
for(i=0;i<cd_number;i++)
{
if(strcmp(CD[i].film_name,cd_name)==0)
{
cd_number--;
for(j=i;j<cd_number;j++)
strcpy(CD[i].film_name,CD[j+1].film_name);
strcpy(CD[i].film_gongsi,CD[j+1].film_gongsi);
strcpy(CD[i].film_daoyan,CD[j+1].film_daoyan);
strcpy(CD[i].film_zhuyan,CD[j+1].film_zhuyan);
strcpy(CD[i].shijie,CD[j+1].shijie);
key=1;
printf("删除成功!");
getchar();
getchar();
}
}
if(key!=1)
{
printf("无此碟片!");
getchar();
getchar();
}
第三部分 课程设计总结
经过几周的课程设计,我学到了很多东西:
①巩固和加深了对编程的理解,提高综合运用本课程所学知识的能力。
②培养了我选用参考书,查阅手册及文献资料的能力。培养独立思考,深入研究,分析问题、解决问题的能力。
③经过实际编译系统的分析设计、编程调试。
④能够按要求编写课程设计报告书,能正确阐述设计和实验结果,正确绘制系统和程序框图。 课程设计是把我们所学的理论知识进行系统的总结并应用于实践的良好机会,有利于加强我们用知识理论来分析实际问题的能力,进而加强了我们对知识认识的实践度,巩固了我们的理论知识,深化了对知识的认识,并为走向社会打下一个良好的基础。
在这次课程设计中我遇到许多问题和麻烦,得到了老师的帮助和指导,才能够使得这次课程设计顺利的进行下去。
另外,在程序调试过程中,也得到很多同学的帮助,给我及时指出错误,提出许多宝贵意见。
附录:程序代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<conio.h>
void check2(void);
void add(void); //新片上架函数
void read(void);//浏览碟片
void shanchu(void);//删除碟片
void check(void); // 碟片查询函数
void rent(void); //碟片借阅函数
void returnn (void);// 碟片归还函数
int user_number =2; //定义会员函数
int cd_number =1; //定义碟片函数
struct cd//碟片结构体
{
char film_name[100]; //碟片名称
char film_gongsi[100]; //出品公司
char film_daoyan[100]; //导演姓名
char film_zhuyan[100]; //主演姓名
char shijie[11]; //上映时间
};
int n;//借阅标记
struct rent//碟片借阅结构体
{
char username[10];//使用者名
char userxingbie[10];//使用者性别
int userage;//使用者年龄
int year;//使用者出生年份
int month;//使用者出生月份
int day;//使用者出生天数
char film_name[10][10]; //碟片名称
char rent_time; //借出日期
int return_time; //归还日期
int money; //租金
};
struct cd CD[1000]; //定义CD函数
struct rent RENT[1000]; //定义出租函数
void main() //主函数
{
char choice;
char op;
system("cls");
a:
printf("1:碟片添加 \n");
printf("2:碟片预览 \n");
printf("3:碟片查询 \n");
printf("4:碟片删除 \n");
printf("5:碟片借阅 \n");
printf("6:碟片归还 \n");
printf("0:退出程序 \n");
printf("请输入你的选择:\n");
scanf("%c",&choice);
switch(choice) //多条件选择判断
{
case'1':
{
system("cls");
add(); //碟片添加函数
break;
}
case'2':
{
system("cls");
read();//浏览函数
break;
}
case'3':
{
system("cls");
printf("1.按影碟名查询 \n");
printf("2.按主演名查询 \n");
printf("请输入查询方式:\n");
getchar();
scanf("%c",&op);
switch (op)
{
case '1':
{
system("cls");
check();
break;
}
case '2':
{
system("cls");
check2();
break;
}
}
break;
}
case'4':
{
system("cls");
shanchu(); //删除函数
break;
}
case'5':
{
system("cls");
rent(); //碟片借出函数
break;
}
case'6':
{
system("cls");
returnn();//碟片归还函数
break;
}
case'0':
system("cls");
printf ("感谢您对此系统的使用,再见!\n");
exit(0);//退出函数
}
system("cls");
goto a;
}
void add(void)//新片添加
{
FILE *a; //文件指针
printf("请输入碟片名称:\n");
scanf("%s",CD[cd_number].film_name);
printf("请输入出品公司:\n");
scanf("%s",CD[cd_number].film_gongsi);
printf("请输入导演姓名:\n");
scanf("%s",CD[cd_number].film_daoyan);
printf("请输入主演姓名:\n");
scanf("%s",CD[cd_number].film_zhuyan);
printf("请输入上映时间:\n");
scanf("%s",CD[cd_number].shijie);
getchar();
n = 1; //修改借阅标记
if(0==cd_number)
{
a=fopen("cd.txt","wb");
fwrite(&CD[cd_number],sizeof(struct cd),1,a);
}
else
{
a=fopen("cd.txt","ab");
fwrite(&CD[cd_number], sizeof(struct cd), 1, a);
}
cd_number++;
printf("影片添加成功\n");
fclose(a);
printf(" 输入任意键返回");
getch();
}
void read(void)//--------------------浏览影碟信息-----------------------------------
{
int i;
system("cls");
for(i=1; i<cd_number; i++)
{
printf(" 碟片名称 :");
printf("%s\n",CD[i].film_name);
printf(" 出品公司 :");
printf("%s\n",CD[i].film_gongsi);
printf(" 导演姓名 :");
printf("%s\n",CD[i].film_daoyan);
printf(" 主演姓名 :");
printf("%s\n",CD[i].film_zhuyan);
printf(" 上映时间 :");
printf("%s\n",CD[i].shijie);
}
printf("输入任意键返回");
getch();
}
void check(void)//影碟信息查询
{
int i;
char cd_name[10];
system("cls");
printf("请要查询的输入碟片名:\n");
scanf("%s",cd_name);
for(i = 0; i < cd_number; i++)
{
if(strcmp(CD[i].film_name,cd_name)==0)
{
printf("\n\n");
printf(" 碟片名称 :");
printf("%s\n",CD[i].film_name);
printf(" 出品公司 :");
printf("%s\n",CD[i].film_gongsi);
printf(" 导演姓名 :");
printf("%s\n",CD[i].film_daoyan);
printf(" 主演姓名 :");
printf("%s\n",CD[i].film_zhuyan);
printf(" 上映时间 :");
printf("%s\n",CD[i].shijie);
break;
}
if(i==cd_number)
printf("抱歉,不能找到。\n");
}
getchar();
printf(" 输入任意键返回");
getch();
}
void rent(void) //-------------碟片借阅函数-----------------------------
{
int n;
char user_name[10];
char cd_name[10];
FILE *a;//
FILE *b;//
int k=0;
int i,j;
a = fopen("rent.txt","r");
b = fopen("cd.txt","r");
for (i = 0; i < cd_number; i++)
{
fread(&CD[i], sizeof(struct cd),1,b);
}
for (i = 0; i < user_number; i++)
{
fread(&RENT[i],sizeof(struct rent),1,a);
}
printf("请输入碟片名称\n");
scanf("%s",cd_name);
k++;
getchar();
printf("已借%d张\n",k);
for (j = 0; j < cd_number; j++)
{
if((strcmp(CD[j].film_name, cd_name))==0)
{
n=0;
}
}
printf("请输入借出日期:\n");
scanf("%d",&RENT[i].rent_time);
printf("借阅成功\n");
fclose(a);
fclose(b);
printf(" 输入任意键返回");
getch();
}
void returnn (void) //碟片归还函数----------------------------
{
int n;
char user_name[10];
char cd_name[10];
FILE *a;
FILE *b;
int i;
int j;
int k = 0;
a = fopen("rent.txt","r");
b = fopen("cd.txt","r");
for (i = 0; i < cd_number; i++)
{
fread(&CD[i], sizeof(struct cd), 1, b);
}
for (i = 0; i < user_number; i++)
{
fread(&RENT[i], sizeof(struct rent), 1, a);
}
for (i = 0; i < user_number; i++)
{
if ((strcmp(user_name, RENT[i].username))==0)
{
printf("输入要归还的碟片名:\n");
scanf("%s",cd_name);
for (j = 0; j < cd_number; j++)
{
if((strcmp(CD[j].film_name, cd_name))==0)
{
n = 1;
break;
}
}
}
}
printf("借出日期:%d\n",RENT[i].rent_time);
printf("归还日期:\n");
scanf("%d",&RENT[i].return_time);
getchar();
if (((RENT[i].return_time - RENT[i].rent_time) % 3)==0)
{
RENT[i].money = (RENT[i].return_time - RENT[i].rent_time) / 3;
}
else
{
RENT[i].money = (RENT[i].return_time - RENT[i].rent_time) / 3 + 1;
}
printf("租金:%d\n",RENT[i].money);
printf(" 输入任意键返回");
getch();
fclose(a);
fclose(b);
}
void shanchu(void)//删除碟片
{
int i,j,key;
char cd_name[10];
system("cls");
printf("请输入要删除的碟片:");
scanf("%s",&cd_name);
if(cd_name==0) return;
for(i=0; i<cd_number; i++)
{
if(strcmp(CD[i].film_name,cd_name)==0)
{
cd_number--;
for(j=i; j<cd_number; j++)
strcpy(CD[i].film_name,CD[j+1].film_name);
strcpy(CD[i].film_gongsi,CD[j+1].film_gongsi);
strcpy(CD[i].film_daoyan,CD[j+1].film_daoyan);
strcpy(CD[i].film_zhuyan,CD[j+1].film_zhuyan);
strcpy(CD[i].shijie,CD[j+1].shijie);
key=1;
printf("删除成功!");
getchar();
printf(" 输入任意键返回");
getch();
}
}
if(key!=1)
{
printf("无此碟片!");
printf("您可以与管理员取得联系,希望
展开阅读全文