学生籍贯信息记录簿课程设计报告Word下载.docx
《学生籍贯信息记录簿课程设计报告Word下载.docx》由会员分享,可在线阅读,更多相关《学生籍贯信息记录簿课程设计报告Word下载.docx(20页珍藏版)》请在冰豆网上搜索。
{
charnum[21];
//学生学号
charname[256];
//学生姓名
charaddress[562];
/学生籍贯
structStudent*next;
};
声明一个结构体类型Student
3.模块设计
(1)creat函数:
添加需要录入的学生信息
(2)name_surch函数:
根据姓名查找学生
(3)num_surch函数:
根据学号查找学生
(4)NativePlace_surch函数:
按籍贯查找学生
(5)modification_shiyan函数:
修改学生信息
(6)showSzechwan_No函数分别显示唐山和非唐山籍学生并非别存盘
(7)print_save函数:
保存文件信息
(8)fileout函数:
显示文件信息
2.程序流程图
四、程序代码和运行结果
程序代码
#include<
stdio.h>
string.h>
stdlib.h>
#defineLENsizeof(structStudent)
intn;
//n为全局变量,本文件模块中各函数均可使用它
structStudent*creat()//定义函数。
此函数返回一个指向链表头的指针
structStudent*head;
structStudent*p1,*p2;
n=0;
p1=p2=(structStudent*)malloc(LEN);
printf("
请依次输入学生的信息,输入学号为零时退出。
\n"
);
学号\t姓名\t地址\n"
scanf("
%s%s%s"
p1->
num,p1->
name,p1->
address);
head=NULL;
while(p1->
num[0]!
='
0'
)//当学号是0时,退出
{
n=n+1;
if(n==1)
head=p1;
else
p2->
next=p1;
p2=p1;
p1=(structStudent*)malloc(LEN);
//开辟动态存储区,把起始地址付给p1
}
p2->
next=NULL;
system("
cls"
return(head);
}
voidprint_save(structStudenthead)
FILE*fp;
structStudent*p;
fp=fopen("
D:
\\stduent.txt"
"
wb+"
//打开文件
if(fp==NULL)
printf("
文件无法打开\n"
exit(0);
\n现在,有%d条记录,分别是:
n);
p=&
head;
if(&
head!
=NULL)
do
{
printf("
\n学号:
"
puts(p->
num);
\n姓名:
name);
\n地址:
fseek(fp,0,2);
if(fwrite(p,sizeof(structStudent),1,fp)!
=1)
printf("
文件无法写入\n"
p=p->
next;
}while(p!
=NULL);
fclose(fp);
//关闭文件
getchar();
system("
structStudent*pt;
//定义一个Student类型的指针
charcomp[3];
//comp为保存输入的变量
intmain()//一个调用这个creat函数的main函数c
voidShowView();
//界面显示
voidname_surch();
//按姓名查找
voidnum_surch();
//按学号查找
voidNativePlace_surch();
//按籍贯查找
voidmodification_shiyan();
//修改学生信息
voidshowSzechwan_No();
//分别显示唐山和非唐山籍学生并非别存盘
voidfileout(structStudent*p);
//文件输出
voidprint_save(structStudenthead);
while
(1)
ShowView();
if(strnicmp(comp,"
1"
3)==0)//strnicmp比较两个字符串的函数
pt=creat();
//函数返回链表第一个结点的地址
}
elseif(strnicmp(comp,"
2"
3)==0)
print_save(*pt);
3"
3)==0)//输出文件内容
fileout(pt);
4"
name_surch();
5"
num_surch();
8"
//modification();
modification_shiyan();
7"
showSzechwan_No();
6"
NativePlace_surch();
0"
break;
输入错误!
!
return0;
voidfileout(structStudent*p)
inti;
现在有%d条记录,分别是:
rb"
//0x00429af0
rewind(fp);
for(i=0;
i<
n;
i++)
fread(p,sizeof(structStudent),1,fp);
//从文件中读取一块数据
%6s"
p->
puts("
fclose(fp);
getchar();
voidShowView()//主菜单
**********************欢迎进入学生籍贯信息记录簿*******************************\n"
\n"
*******************************************************************************\n"
****1、添加学生信息********\n"
****2、保存当前信息********\n"
****3、显示文件中的信息********\n"
****4、按名字搜索********\n"
****5、按学号搜索********\n"
****6、按籍贯搜索********\n"
****7、分别显示唐山和非唐山籍学生并非别存盘********\n"
****8、修改学生信息********\n"
****0、退出********\n"
********************请输入您的选择:
gets(comp);
//清屏
voidname_surch()
charsurch[256];
请输入要查询的人的名字:
gets(surch);
r"
不能打开文件\n"
//指向文件的开始
while(!
feof(fp))//查找
Studenta;
while(!
feof(fp))
fread(&
a,sizeof(Student),1,fp);
//从p指向的文件读入一组数据
if(!
strcmp(a.name,surch))
{
%s,%s,%s\n"
a.num,a.name,a.address);
break;
}
if(!
{return;
查无此人·
·
voidnum_surch()
请输入要查询的人的学号:
//0x0042aab8
ERROR"
strcmp(a.num,surch))
voidNativePlace_surch()//按籍贯查询
请输入要查询的人的籍贯:
文件打不开\n"
a,sizeof(structStudent),1,fp);
strcmp(a.address,surch))//相当于strcmp(a.address,surch)==0
voidshowSzechwan_No()//分别显示唐山和非唐山籍学生并非别存盘
FILE*sfp;
//指向唐山籍学生文件
sfp=fopen("
\\唐山stduent.txt"
wb"
if(sfp==NULL)
FILE*ffp;
//指向非唐山籍学生文件
ffp=fopen("
\\非唐山stduent.txt"
if(ffp==NULL)
{printf("
exit(0);
唐山籍学生信息:
Studenta;
i++)
fread(&
//从p指向的文件读取一组数据
strcmp(a.address,"
唐山"
)||!
tangshan"
tangshanshi"
唐山市"
))
if(fwrite(&
a,sizeof(structStudent),1,sfp)!
a,sizeof(structStudent),1,ffp)!
fclose(ffp);
fclose(sfp);
非唐山籍学生信息:
if(NULL==ffp)
a,sizeof(structStudent),1,ffp);
if(a.num=="
)
voidmodification_shiyan()//修改学生信息
FILE*fptemp;
structStudenta;
请输入要修改的人的学号:
fptemp=fopen("
\\temp.txt"
fread(&
if(0==strcmp(a.num,surch))
charp;
如果以上信息与你要修改的人的信息对应,请输入(y/n):
scanf("
%c"
&
p);
if('
Y'
==p||'
y'
==p)
请输入要修改成的信息(学号、姓名、籍贯):
getchar();
学号:
gets(a.num);
姓名:
gets(a.name);
地址:
gets(a.address);
fwrite(&
a,sizeof(structStudent),1,fptemp);
fclose(fptemp);
FILE*bb;
FILE*pp;
bb=fopen("
pp=fopen("
feof(pp))
a,sizeof(structStudent),1,pp);
a,sizeof(structStudent),1,bb);
运行结果
1.进入界面
当每一个操作结束时,系统都会自动清屏,并返回主菜单,以保证屏幕整洁。
使用户能拥有一个好的心情使用此软件。
输入3,按enter键,查看文件中所存储的所有信息。
2.添加学生信息界面
3.保存信息界面
4.按姓名查找
5.按学号查找
6.按籍贯查找
7.分别显示唐山和非唐山籍贯学生信息并存盘
8.修改学生信息
按提示操作,如果现实的学生的信息是你要修改的,就输入y。
再输入要改成的详细信息,按enter键保存、退出。
五、编程中遇到的困难和解决方法
困难:
1.由于fread以及fwrite不能较熟练的应用,在实现唐山和非唐山籍学生分类时出错。
2.偶尔会出现文件打开错误的情况或者乱码现象
解决方法:
1.看书熟悉fread和fwrite的使用规则,在此基础上对程序加以修改
2.同时认真检查文件的打开格式是否出错,避免因打开方式错误而导致程序不能正常运行
六、心得体会
为了提高我们的实践能力,让我们学以致用,能灵活运用所学的知识进行再创造,学校特安排我们进行为期二周的VisualC++课程设计实习,并安排了指导老师帮助辅导,让我们在规范化、严谨化、实用化上面有了很大进展。
在此次字符统计程序开发过程中,有很多东西值得我们思考并总结。
开发过程大体可分为以下几个步骤:
(1)思考总体设计方案:
总体结构和模块外部设计,功能分配。
思考要实现整个程序大体需要的几个模块和其中用到的VisualC++语言基本操作符、语句等。
(2)画出总体设计方案流程图:
用流程图的形式展现你的基本编程思想。
(3)流程图具体化:
即将流程图中的几大模块的具体实现思考清楚,可以用流程图的形式展现.并想好实现的关键代码。
(4)编辑程序代码:
这是一个至关重要复杂而且需要反复修改的环节,在此环节中你将发现总体设计和模块思想会存在很多问题,需不断改进.如何实现各函数功能,达到预期效果也将是一项繁复的工作。
(5)代码的调试:
在VisualC++6.0环境下输入代码并进行调试和正确运行。
在调试过程中会遇到很多需要精化的地方,需要十足的耐心与细心,不断改进完善程序。
(6)最后修饰:
程序可以正确运行之后,再不影响程序功能的情况下,运用各种辅助性符号,使界面更加美观漂亮,操作更人性化.增强程序的新意与可行性。
通过这次课程设计,使我们更加熟悉的掌握了VisualC++语言的运用。
帮助我们熟悉了更多VisualC++语言的功能,提高了我们的动手能力,学到了许多解决实际问题的宝贵经验.同时也挖掘出了我们潜在的能力,使我们对自己更有自信,对编程也更有兴趣。
我相信,只要努力、勤奋、坚持不懈,就没有什么做不到的事,不能还没开始就退缩,要勇于拼搏,敢于创新。
七、参考文献
[1]马安鹏.Visua