1、C语言课程设计实习报告专 业: 学 号: 班级序号: 姓 名: 指导教师: C语言程序设计报告(实习日期: 2010-8至2010-9)一、C语言课程设计的目的:高级语言课程设计是学习完高级语言程序设计课程后进行的一次全面的综合性上机实验。其目的在于为同学提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼同学的分析解决实际问题的能力。提高学生适应实际,实践编程的能力。二、 题目:歌曲信息管理系统需求分析:制作一个歌曲信息管理系统使之有以下功能 1 歌曲信息包括歌曲名,作者,演唱者,发行年月等。 2 可以对歌曲信息进行输入,删除,浏览。 3 可以查询歌曲名,作者
2、,演唱者信息。 4 可以提供按作者显示功能。 5 用文件存储信息。三、 总体设计根据分析,整个系统可设计为以下4个模块:信息输入模块,删除模块,浏览模块。查找模块。 歌曲管理系统输入模块(enter)删除模块(delete)浏览模块(browse)查找模块(search)退出模块(exit)(图 1)信息输入:依次按顺序结构输入歌曲名,作者,演唱者,发行年月。输入模块(enteer)输入作者(author)输入歌曲名(songs name)输入演唱者(singer)输入日期(outday)继续输入?(Y/N)(图 2)信息删除:根据输入的歌曲名,作者,演唱者等一项可以删除对应的其他项 删除模块
3、(delete)输入歌曲名(enter name)输入作者(enter author)输入演唱者(enter singer)( 图 3)信息浏览:可以直接浏览歌曲,作者,演唱者,发行年月。歌曲浏览浏览作者浏览歌曲名浏览演唱者浏览日期(图4)信息查找:可以查找歌曲,作者等。并且可以选择查找的方式:按作曲者、按演唱者、按歌曲名字。查找模块(search)按作者查找(by author)按演唱者查找(by singer)按歌曲名字查找(by name)输入作者(enter author)输入演唱者(enter singer)输入歌曲名字(enter name)要找的信息要找的信息要找的信息(图 5)
4、退出模块点击直接退出四 详细设计1 结构体 #include #include #include #include int i=0;struct system char author20;char singer20;char time20;char name20; dan100;2 主函数主函数的设计提供数据输入、数据处理和数据输出以及各种函数的调用。其中各功能模块用菜单方式选择;另外,部分菜单也可以写成函数。void main()void menu();void function1();void function2();void function3();void function4();me
5、nu();return;题目对应具体的程序如下:main()int a;while(1) printf(ttWelcome to the songsystem!-by longn); printf(tt*o MENU o*nn); printf(ttt(1).Entern); printf(ttt(2).Deleten); printf(ttt(3).Browsen); printf(ttt(4).Searchn); printf(ttt(0).exitn); printf(tt*n); printf(ntttPlease choose the number(0-4):);scanf(%d,&
6、a);if(a=0) break;switch(a)case 1:enter();break;case 2:delete();break;case 3:browse();break;case 4:search();break;主函数的流程图如图6开始 显示一系列功能 判断 根据判断的值调用各功能模块函数 结束(图 6)3 各功能模块设计(1)输入模块void enter()int j;char c2;FILE *fp; if(fp=fopen(data.txt,w)=NULL)printf(Can not open the file!n);exit(0);for(j=0;ji;j+) fwri
7、te(&danj,sizeof(struct system),1,fp); while(1)printf(Please input the author:n);scanf(%s,dani.author);printf(Please input the songs name:n);scanf(%s,dani.name);printf(Please input the singer:n);scanf(%s,dani.singer);printf(Please input the outday:n);scanf(%s,dani.time);if(fwrite(&dani+,sizeof(struct
8、 system),1,fp)!=1)printf(File write errorn);else printf(Successful!n);printf(Is there any more?( Yesy/Non) n);scanf(%s,c);if(strcmp(c,n)=0)break; fclose(fp); 输入作者输入歌曲名字输入演唱者输入发行日期是否继续输入?(图 7) ( 图 2)2 删除模块:用户输入要删除的信息,如输入歌曲名 ,根据歌曲名找到其他记录并删除。程序void delete() int j,v,c;char w20; FILE *fp;printf(Please in
9、put the songname which you want to delete:);scanf(%s,w); fp=fopen(data.txt,rb); for(j=0;j100;j+) if(fread(&danj,sizeof(struct system),1,fp)!=1) break;v=j;for(j=0;jv;j+) if(strcmp(w,danj.name)=0)c=j; fclose(fp);fp=fopen(data.txt,wb); for(j=0;jv;j+) if(j!=c) fwrite(&danj,sizeof(struct system),1,fp); f
10、close(fp);printf(Delete OK!n);i-; 3浏览模块:在用户按下菜单后直接显示出所有歌曲信息。void browse() int j; FILE *fp; fp=fopen(data.txt,rb); for(j=0;j100;j+) if(fread(&danj,sizeof(struct system),1,fp)=1)printf(Name:%sn,danj.name);printf(Author:%sn,danj.author);printf(Singer:%sn,danj.singer);printf(Outday:%sn,danj.time);printf
11、(-n);else break; fclose(fp);4查找模块:用户输入要查找的歌曲名或歌曲的任意信息,按菜单键。void search() int flag,j,x;char w20;FILE *fp;char v20; printf(1)By authorn); printf(2)By singern);printf(3)By namen);printf(Please choose which you want to search:n);scanf(%d,&x); if(x=3) flag=0;printf(Please input the songs name:); scanf(%s
12、,&w); fp=fopen(data.txt,rb); for(j=0;j100;j+) if(fread(&danj,sizeof(struct system),1,fp)!=1) break; if(strcmp(danj.name,w)=0) printf(Name:%sn,danj.name);printf(Author:%sn,danj.author);printf(Singer:%sn,danj.singer);printf(Outday:%sn,danj.time);printf(-n);flag=1; if(flag=0)printf(Cannot find the song
13、!n); fclose(fp);else if(x=2) flag=0;printf(Please input the singer:); scanf(%s,&v); fp=fopen(data.txt,rb); for(j=0;j100;j+) if(fread(&danj,sizeof(struct system),1,fp)!=1) break; if(strcmp(danj.singer,v)=0) printf(Name:%sn,danj.name);printf(Author:%sn,danj.author);printf(Singer:%sn,danj.singer);print
14、f(Outday:%sn,danj.time);printf(-n);flag=1; if(flag=0)printf(Cannot find the song!n); fclose(fp); else if(x=1) flag=0;printf(Please input the author:); scanf(%s,w); fp=fopen(data.txt,rb); for(j=0;j100;j+) if(fread(&danj,sizeof(struct system),1,fp)!=1) break; if(strcmp(danj.author,w)=0) printf(Name:%s
15、n,danj.name);printf(Author:%sn,danj.author);printf(Singer:%sn,danj.singer);printf(Outday:%sn,danj.time);printf(-n);flag=1; if(flag=0)printf(Cannot find the song!n); fclose(fp);else printf(Error!n); 开始输入歌曲信息找到记录?显示找到的记录提示没有找到继续查找?用户选择:1)查找另一个2)删除3)浏览4)输入另一个结束(图 8)整个程序的流程图如上图8五 上机操作1 主菜单函数2 输入模块3删除模块4
16、浏览模块5查找模块按作者查找:按演唱者查找:按歌曲名字查找:6退出模块学 习 心 得通过此次C语言程序设计实践,我实在是获益匪浅!刚开始对C语言基本上是什么都不懂,当要开始设计的时候,还真不知从哪下手!结果,第一次的上机,就真的不知道干什么了,后来只写了几个预处理命令。一开始做题,也是有点模糊,在指导老师的指导下,我们慢慢的进入状态,我做的是一个歌曲管理系统,内容包括很多。运用的函数也是非常的复杂,首先完成了结构体,经过几天的努力,我完成了大半个程序,但是总是有很多错误出现,有好多是些小问题,这都是我的粗心大意造成的,所以设计程序一定要仔细,不容一点的马虎。当然也有大问题,关于文件的操作,是我
17、们最大的问题,不过,我们做好后,经过老师的讲解和改错,我们也懂得设计和运用了。同时,也让我知道了,不懂就要问,没有老师和同学的帮助,我也不能在规定时间内完成。这次设计,让我重新掌握了C语言,而且还得到了用C语言解决实际问题的宝贵经验,也从中学到了很多东西。让我懂得了做什么事都要有耐心,要有对什么事都认真仔细的品质。还有老师的帮助与指导,让我学会了很多以前不懂的东西,使我更加意识到实践的重要性!六、算法和系统的优缺点:此系统的最大有点是简洁,易懂易操作。其中的信息都以文件储存,便于调用。但是次系统不能够在删除的时候按照操作者的想要的方式进行删除。另外在退出系统后直接退出了系统。改进思路:在删除模
18、块中加入可选择的删除模式,达到如查找模块一样的可选择模式删除。另外在退出系统模块中加入返回主菜单功能。七 :原代码(附录)#include #include #include #include int i=0;struct system char author20;char singer20;char time20;char name20; dan100;void enter()int j;char c2;FILE *fp; if(fp=fopen(data.txt,w)=NULL)printf(Can not open the file!n);exit(0);for(j=0;ji;j+) f
19、write(&danj,sizeof(struct system),1,fp); while(1)printf(Please input the author:n);scanf(%s,dani.author);printf(Please input the songs name:n);scanf(%s,dani.name);printf(Please input the singer:n);scanf(%s,dani.singer);printf(Please input the outday:n);scanf(%s,dani.time);if(fwrite(&dani+,sizeof(str
20、uct system),1,fp)!=1)printf(File write errorn);else printf(Successful!n);printf(Is there any more?( Yesy/Non) n);scanf(%s,c);if(strcmp(c,n)=0)break; fclose(fp);void delete() int j,v,c;char w20; FILE *fp;printf(Please input the songname which you want to delete:);scanf(%s,w); fp=fopen(data.txt,rb); f
21、or(j=0;j100;j+) if(fread(&danj,sizeof(struct system),1,fp)!=1) break;v=j;for(j=0;jv;j+) if(strcmp(w,danj.name)=0)c=j; fclose(fp);fp=fopen(data.txt,wb); for(j=0;jv;j+) if(j!=c) fwrite(&danj,sizeof(struct system),1,fp); fclose(fp);printf(Delete OK!n);i-;void browse() int j; FILE *fp; fp=fopen(data.txt
22、,rb); for(j=0;j100;j+) if(fread(&danj,sizeof(struct system),1,fp)=1)printf(Name:%sn,danj.name);printf(Author:%sn,danj.author);printf(Singer:%sn,danj.singer);printf(Outday:%sn,danj.time);printf(-n);else break; fclose(fp);void search() int flag,j,x;char w20;FILE *fp;char v20; printf(1)By authorn); pri
23、ntf(2)By singern);printf(3)By namen);printf(Please choose which you want to search:n);scanf(%d,&x); if(x=3) flag=0;printf(Please input the songs name:); scanf(%s,&w); fp=fopen(data.txt,rb); for(j=0;j100;j+) if(fread(&danj,sizeof(struct system),1,fp)!=1) break; if(strcmp(danj.name,w)=0) printf(Name:%
24、sn,danj.name);printf(Author:%sn,danj.author);printf(Singer:%sn,danj.singer);printf(Outday:%sn,danj.time);printf(-n);flag=1; if(flag=0)printf(Cannot find the song!n); fclose(fp);else if(x=2) flag=0;printf(Please input the singer:); scanf(%s,&v); fp=fopen(data.txt,rb); for(j=0;j100;j+) if(fread(&danj,
25、sizeof(struct system),1,fp)!=1) break; if(strcmp(danj.singer,v)=0) printf(Name:%sn,danj.name);printf(Author:%sn,danj.author);printf(Singer:%sn,danj.singer);printf(Outday:%sn,danj.time);printf(-n);flag=1; if(flag=0)printf(Cannot find the song!n); fclose(fp); else if(x=1) flag=0;printf(Please input th
26、e author:); scanf(%s,w); fp=fopen(data.txt,rb); for(j=0;j100;j+) if(fread(&danj,sizeof(struct system),1,fp)!=1) break; if(strcmp(danj.author,w)=0) printf(Name:%sn,danj.name);printf(Author:%sn,danj.author);printf(Singer:%sn,danj.singer);printf(Outday:%sn,danj.time);printf(-n);flag=1; if(flag=0)printf
27、(Cannot find the song!n); fclose(fp);else printf(Error!n); main()int a;while(1) printf(ttWelcome to the songsystem!-by longn); printf(tt*o MENU o*nn); printf(ttt(1).Entern); printf(ttt(2).Deleten); printf(ttt(3).Browsen); printf(ttt(4).Searchn); printf(ttt(0).exitn); printf(tt*n); printf(ntttPlease choose the number(0-4):);scanf(%d,&a);if(a=0) break;switch(a)case 1:enter();break;case 2:delete();break;case 3:browse();break;case 4:search();break;35 / 35