单片机按键次数计数器分析.docx
《单片机按键次数计数器分析.docx》由会员分享,可在线阅读,更多相关《单片机按键次数计数器分析.docx(22页珍藏版)》请在冰豆网上搜索。
单片机按键次数计数器分析
成绩评定表
学生姓名
班级学号
专业
课程设计题目
1、C语言图书管理系统
2、单片机按键次数计数器
评
语
组长签字:
成绩
日期
2014年7月15日
课程设计任务书
学院
专业
学生姓名
班级学号
课程设计题目
1、C语言图书管理系统2、单片机按键次数计数器
实践教学要求与任务:
1、学习和掌握C++软件使用方法。
2、用Keil与Proteus联调
3、
4、PCB板图设计。
工作计划与进度安排:
第一周
周一:
布置课设任务,收集资料;
周二:
安装设计软件,熟悉软件操作方法;
周三:
模拟电路设计,画电路原理图;
周四、五:
模拟电路仿真,调试。
第二周
周一:
学习PCB软件操作方法;
周二、三:
画电路图;
周四:
电路PCB设计,画电路板图;
周五:
验收,交课设报告书。
指导教师:
2014年6月6日
专业负责人:
2014年6月7日
学院教学副院长:
2014年6月7日
一、课程设计的目的
1、C语言课程设计的目的
1)复习、巩固C语言的基础知识,进一步加深对C语言的理解和掌握;
2)课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。
提高学生适应实际,实践编程的能力;
3)培养学生在项目开发中团队合作精神、创新意识及能力。
2、单片机课程设计的目的
以本学期对单片机的学习和认识,并通过本次课程设计加以应用,从而达到一个对所学知识的巩固、更深一步的理解,面对一个电子设计,应对出系统的方案,分析出各个板块来,再对各个板块进一步的具体的设计,先进行硬件电路设计,此时一定要考虑好要用什么元件、各个元件的具体参数、是否能实现应有功能,从而得到一个完整的硬件电路。
在根据该电路设计出软件的功能模块、从而完成程序流程图,在根据流程图完成程序的设计,并通过反复的调试、运行、更正,直至完成既定功能为止,最后将软件、硬件结合进行调试、运行,对其功能进行最终测试,并反复思考其测试中遇到相应问题的原因,并将其一一处理,从而完成本次设计的实验要求,以及本次课程设计的最终目的。
二、C语言课程设计---图书管理系统
1、需求分析
为了满足图书管理的要求,通过计算机技术给图书管理人员和读者借、还书带来便利。
使用c语言编写了图书管理系统。
本系统主要实现图书信息管理的功能,通过此系统可对图书馆库存图书信息进行管理和维护操作。
实现了图书馆内管理的一般功能,包括查询、借书、还书、添加、删除、修改图书信息等。
所设计的系统以菜单方式工作,为用户提供清晰的使用提示,依据用户的选择来进行各种处理,并且在此过程中能够尽可能的兼容用户使用过程中可能出现的异常情况。
图书信息包括编号、书名、作者、出版社、出版日期、价格、在库状态等。
图书信息的录入和显示要求有一定的规范格式,录入的图书信息用文件形式保存,并可以对其进行浏览、查询、修改、删除等基本操作。
整个程序实现链表操作,对图书信息的操作逐个地进行,一个图书信息的更改不应影响其他的图书记录。
2、算法设计:
a.设计思想:
整个系统制造的而过程中,涉及了较多C语言知识点,对于不同的数据类型、程序控制结构、数据结构作以分析和总结,并结合这个课题进行综合的应用,在一定程度上做到了对所学知识融会贯通。
进一步加深、巩固了所学的专业的基本理论知识,培养了综合分析问题、解决问题的能力。
在设计程序时,实现了程序的模块化、结构化。
在主函数中调用各种子函数,操作界面简单,易操作。
b.设计表示:
(1)、整个系统除了主函数外,另外还有各种功能子函数,利用无限次循环语句while()和选择语句swithch()实现各个子函数的调用,系统根据输入的数字选项来调用相应的函数,以实现相应的功能。
主要实现了图书的录入、存储、查询、添加、删除、修改等功能。
(2)、Cbook();这是一个指针函数,它主要实现了链表的创建,并且在创建过程中从文件读取信息到链表中,以用于后面其他函数的操作。
它返回的时一个单向链表的头。
其他函数调用时只需调用它返回的头即可。
(3)、mainmenu();、menu1();、glmenu();、cxmenu();、jhmenu();这五个函数时整个图书管理系统的全部菜单函数,mainmenu();为系统主界面,进入时可选择进入程序和退出程序。
menu1();为进入程序时显示的功能菜单,在此菜单可以选择录入、保存图书信息,也可选择进入其他子系统。
glmenu();此菜单为进入图书管理系统的菜单,在此可以选择添加、删除、修改图书等操作。
cxmenu();为查询系统的菜单,在此可以选择按书名、编号、作者等方式进行查询图书。
jhmenu();为借书还书的子菜单,在此可以选择借书还书操作。
操作完成后按提示信息进行文件的保存操作。
(4)、print();这个函数为链表的输出函数,把链表的头传给函数后,可输出整个链表的所有信息。
、
(5)、hold();这个函数为保存信息到文件的函数,使用时将链表的头传给函数,函数可将整个链表的所有信息存入到磁盘文件中。
并覆盖掉源文件,以便以后调用。
(6)、holdcx();这个函数为保存查询信息到文件的函数,使用时将查询到的节点指针传给函数,函数会将该节点所有信息保存到文件中去,文件写入是以追加方式写入,以便用户查看。
(7)findboookname();findauthor();这二个函数为查询图书信息函数,findboookname();按书名查询、findauthor();按作者查询。
查询到信息后返回信息所在节点,查询不到则返回空指针。
(8)、add();sortnumber();delbook();revamp();这四个函数为功能函数,add();添加一本图书信息、sortnumber();将图书按编号排序、delbook();删除一本图书信息、revamp();修改一本图书信息。
调用时将链表头指针传递给函数,函数返回经过功能操作后的头指针。
c.实现注释:
这个实用的小型图书管理程序程序以链表操作完成,并实现文件信息的录入和保存等功能,所有信息以磁盘文件方式保存,方便用户使用。
实现了图书管理的基本功能,包括了图书的录入、存储、查询、添加、删除、修改等功能。
查询时可按书名、作者等方式查询,找到后输出这本书的所有信息。
在添加图书信息后,还增加了链表排序操作,并输出整个链表,方便用户检查信息。
系统中主要的数据结构就是图书的信息,包含编号、书名、作者、出版社、出版时间、价格、在库状态等,在处理过程中各项可以作为一本图书的不同属性来进行处理。
d.结构体系设计:
图书管理系统主界面流程图
e.设计想法与程序的不足:
作为学期末的一项课程,主要靠编出来的系统来考察我们所掌握的基本理论知识及实际解决问题的能力,通过这次c语言课程设计,很大程度上锻炼了我们写程序的动手能力和自主思考能力。
利用所学知识,开发小型实用的应用系统,掌握运用C语言编写调试应用系统程序,对于我们独立开发应用系统并进行数据处理的综合能力是一个很大的提高。
总的来说这个程序大致实现了题目的要求,但是这套程序仍然存在着很多的问题与不足。
比如,没有对界面进行操作,只是实现了简单的功能,程序写的有点繁琐,不是那么井然有序,条理清晰,程序注释也不是很完善,对信息处理功能还有些不足之处,提示信息不明确,对于数据的错误输入处理不是很完善等等。
这个系统主要是我自己编写的,同时也得到了老师和同学的一些帮助。
我在做系统的过程中也遇到了很多问题,有的是知识不足,有的是考虑不够周全,。
事实证明,只靠自己的知识面还是很窄,独立处理问题能力不是很强,以后还要加强对c语言的学习。
我认为对于C语言编写的程序来说,使用方法大致都是一样的,所以如果要改进的话,就是要改进一些算法,尽量把界面编写清楚,提示信息全面,方便易用。
3、用户手册:
下面,我大致介绍一下我的系统的主要功能和注意事项:
当运行此程序时,首先进入系统主界面功能菜单中,选择1进入图书信息录入系统,2进入图书信息浏览系统,3进入图书查询系统,4进入图书信息删除系统,5图书信息修改系统,6退出图书信息管理系统。
当出现"请选择"时,需要输入选项前的数字,输完之后按回车(下同)。
首次运行系统需要先选择1录入库存书籍信息,然后再选择其他操作。
当选择5时会进入图书信息修改,在这里可以选择修改信息等操作,需要注意的是每次执行完修改等操作后需要手动选择保存图书信息的操作,不然磁盘文件信息不会改变(下同)。
返回上级菜单进入图书查询系统管理系统的差不多,用户可自己尝试使用,所有信息最后均以磁盘文件方式保存,而且格式固定,在输入和输出均按这种格式,用户在使用时必须要按这种格式输入,否则会出现文件信息错误。
4、调试与测试:
上机操作(截图)系统主界面
选择1进入图书信息录入系统
选择2进入图书信息浏览系统
选择3进入图书查询系统
5、源程序代码
#include
#include
#include
typedefstruct{
charnumber[10];//书号
charname[20];//书名
charauthor[20];//作者
charpublish[50];//出版社
chartime[20];//出版时间
floatprice;
}mbook;
typedefstruct{
intcount;//书的本数
mbookbook[100];//最大可有100本书
}mlibrary;
mlibrarylibrary;
voidsave()//保存图书信息。
{
FILE*fp;
if((fp=fopen("library.doc","w"))==NULL)
{
printf("\n不能保存图书信息\n");
return;
}
fwrite(&library.count,sizeof(int),1,fp);
fwrite(library.book,sizeof(library.book[0]),library.count,fp);
}
voidputin()/*定义录入函数*/
{
inty=1;
system("cls");
while(y)
{
printf("\t请输入您的书籍的书号:
");
scanf("%s",library.book[library.count].number);
printf("\t请输入书名:
");
scanf("%s",library.book[library.count].name);
printf("\t请输入作者名:
");
scanf("%s",library.book[library.count].author);
printf("\t请输入出版社:
");
scanf("%s",library.book[library.count].publish);
printf("\t请输入出版时间:
");
scanf("%s",library.book[library.count].time);
printf("\t请输入该书的价格:
");
fflush(stdin);
scanf("%f",&library.book[library.count].price);
library.count++;
printf("\n是否继续录入(1.继续;0,退出录入):
");
fflush(stdin);
scanf("%d",&y);
if(y!
=1)
{
y=0;
break;
}
}
save();
}
voidlookup()
{
system("cls");
printf("图书号\t图书名\t作者名\t出版社\t出版日期\t图书价格\n");
for(inti=0;i{
printf("%s\t%s\t%s\t%s\t%s\t%6.2f\n",library.book[i].number,library.book[i].name,library.book[i].author,library.book[i].publish,library.book[i].time,library.book[i].price);
}
fflush(stdin);
getchar();
}
voidsearch_by_name()/*定义按书名查询*/
{
chars2[20];
intflag=1;
printf("\n请输入要查询的书名:
");
fflush(stdin);
scanf("%s",s2);
printf("图书号\t图书名\t作者名\t出版社\t出版日期\t图书价格\n");
for(inti=0;iif(strcmp(s2,library.book[i].name)==0)
{
flag=0;
printf("%s\t%s\t%s\t%s\t%s\t%6.2f\n",library.book[i].number,library.book[i].name,library.book[i].author,library.book[i].publish,library.book[i].time,library.book[i].price);
}
if(flag)
{
printf("cannotfound!
");
}
fflush(stdin);
getchar();
}
voidsearch_by_author()/*定义按作者名查询*/
{
chars3[20];
intflag=1;
printf("请输入要查询的书的作者:
");
fflush(stdin);
scanf("%s",s3);
printf("图书号\t图书名\t作者名\t出版社\t出版日期\t图书价格\n");
for(inti=0;iif(strcmp(s3,library.book[i].author)==0)
{
flag=0;
printf("%s\t%s\t%s\t%s\t%s\t%6.2f\n",library.book[i].number,library.book[i].name,library.book[i].author,library.book[i].publish,library.book[i].time,library.book[i].price);
}
if(flag)
{
printf("cannotfound!
");
}
fflush(stdin);
getchar();
}
voidsearch()/*定义查询函数*/
{
inta;
system("cls");/*进行清屏*/
printf("\t\t******************************\n");
printf("开始查询\n");
printf("\t\t\t1---------------search_by_name\n");
printf("\t\t\t2---------------search_by_writer\n");
printf("\t\t\t0---------------exit\n");
printf("\t\t******************************\n");
printf("\t\t请选择你想要的查询方式:
");
fflush(stdin);
scanf("%d",&a);
switch(a)
{
case1:
search_by_name();
break;
case2:
search_by_author();
break;
case0:
return;
}
}
voiddel()/*定义删除函数*/
{
charnumber[10];
system("cls");/*清屏*/
printf("\nPleasetypeinthenumberofthebookyouwanttodelete:
");
fflush(stdin);
scanf("%s",number);
inti;
for(i=0;i{
if(strcmp(number,library.book[i].number)==0)break;
}
if(i!
=library.count)
{
for(;i{
strcpy(library.book[i].name,library.book[i+1].name);
strcpy(library.book[i].number,library.book[i+1].number);
strcpy(library.book[i].publish,library.book[i+1].publish);
strcpy(library.book[i].author,library.book[i+1].author);
strcpy(library.book[i].time,library.book[i+1].time);
library.book[i].price=library.book[i+1].price;
}
library.count--;
}
else
printf("\ncannotfound!
\n");
save();
fflush(stdin);
getchar();
}
voidupdate()//修改图书信息
{
charnumber[10];
system("cls");/*清屏*/
printf("\nPleasetypeinthenumberofthebookyouwanttodelete:
");
fflush(stdin);
scanf("%s",number);
inti;
for(i=0;i{
if(strcmp(number,library.book[i].number)==0)
{
printf("图书号\t图书名\t作者名\t出版社\t出版日期\t图书价格\n");
printf("%s\t%s\t%s\t%s\t%s\t%6.2f\n",library.book[i].number,library.book[i].name,library.book[i].author,library.book[i].publish,library.book[i].time,library.book[i].price);
break;
}
}
if(i!
=library.count)
{
mbookbook;
printf("\n\t\t请输入修改后此图书的信息\n");
printf("\t请输入图书号:
");
scanf("%s",book.number);
printf("\t请输入图书名:
");
scanf("%s",book.name);
printf("\t请输入作者名:
");
scanf("%s",book.author);
printf("\t请输入出版社:
");
scanf("%s",book.publish);
printf("\t请输入出版时间:
");
scanf("%s",book.time);
printf("\t请输入该书的价格:
");
fflush(stdin);
scanf("%f",&book.price);
strcpy(library.book[i].name,book.name);
strcpy(library.book[i].number,book.number);
strcpy(library.book[i].publish,book.publish);
strcpy(library.book[i].author,book.author);
strcpy(library.book[i].time,book.time);
library.book[i].price=book.price;
save();
}
else
printf("\ncannotfound!
\n");
fflush(stdin);
getchar();
}
voidmain()
{
FILE*fp;
if((fp=fopen("library.doc","r"))==NULL)
{
printf("\n不能打开图书信息库\n");
fp=fopen("library.doc","w+");
printf("\n初始化图书信息库,初始化之后要重启程序\n");
library.count=0;
fwrite(&library.count,sizeof(int),1,fp);
fclose(fp);
return;
}
fread(&library.count,sizeof(int),1,fp);
fread(library.book,sizeof(library.book[0]),library.count,fp);
fclose(fp);
inta;
do
{
system("cls");
printf("\n\n\n\n\n\t\t\t\t图书信息管理系统\t\t\t\t\n");
printf("\t\t*********************************************\n");
printf("\t\t\t1------------------图书信息录入\n");
printf("\t\t\t2------------------图书信息浏览\n");
printf("\t\t\t3------------------图书信息查询\n");
printf("\t\t\t4------------------图书信息删除\n");
printf("\t\t\t5------------------图书信息修改\n");
printf("\t\t\t0--------