同学通讯录信息管理.docx
《同学通讯录信息管理.docx》由会员分享,可在线阅读,更多相关《同学通讯录信息管理.docx(18页珍藏版)》请在冰豆网上搜索。
![同学通讯录信息管理.docx](https://file1.bdocx.com/fileroot1/2022-11/23/986d9246-6f8c-415f-b784-f6261421a97d/986d9246-6f8c-415f-b784-f6261421a97d1.gif)
同学通讯录信息管理
沈阳航空航天大学
课程设计
学号2010040703021
班级04070301-
姓名杨亚东
指导教师尹航
2011年9月22日
沈阳航空航天大学
课程设计任务书
院系:
自动化学院专业:
运载器综合测试技术班级:
04070301
学号:
2010040703021题目:
同学通讯录信息管理
一、课程设计时间
2011~12第1学期第4周,即9月19日~9月25日,共计1周,20学时。
二、课程设计内容
用C语言编写程序完成以下任务:
(1)设计学生通讯录的数据结构(比如包括:
学号,姓名,年龄,性别,联系电话,住址等)。
(2)录入通讯录中的学生信息(不少于3人),保存在文件students.txt中。
(3)能够对通讯录中的信息进行修改和删除,并同时更新文件。
(4)系统帮助:
显示关于此系统简单的帮助信息。
(5)版本信息:
显示开发者姓名、班级、开发完成日期、版本号和指导老师等信息。
三、课程设计要求
1.程序质量:
✧贯彻结构化的程序设计思想。
✧用户界面友好,功能明确,操作方便。
✧用户界面中的菜单至少应包括“同学信息录入”、“同学信息更改”、“同学信息删除”、“系统帮助”、“版本信息”、“退出”6项。
✧代码应适当缩进,并给出必要的注释,以增强程序的可读性。
2.课程设计说明书:
课程结束后,上交课程设计说明书和源程序。
课程设计说明书的格式和内容参见提供的模板。
四、指导教师和学生签字
指导教师:
________学生签名:
________
五、成绩
六、教师评语
目录
一、需求分析……1
二、设计分析..………………………………….....2
三、主界面截图…………………………………...7
四、技术要点.……………………………………..9
五、个人总结…………………………………….13
六、参考文献….…………………………………14
七、源程序…………….…………………………14
一、需求分析
根据任务书给定的“课程设计内容”和“课程设计要求”作如下的需求分析。
1、同学信息录入函数主要实现程序最初运行时学生数据的录入以及其后的运行中学生数据的追加功能;
2、同学信息更该函数可以实现对通讯记录中除学号以外的信息进行修改;
3、同学信息删除函数实现的功能是按照学号对学生的数据记录进行删除;
4、系统帮助函数为用户提供简单的帮助
5、显示函数实现的是显示目前所有的有效同学记录信息。
除上面介绍的功能之外,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。
每一个学生记录都包含学号,姓名,年龄,性别,联系电话,住址。
在程序当中,将学生记录类型定义为结构体类型,添加以及追加的学生信息直接写入D:
盘的student.txt文件中,其它函数每次对学生记录的访问,其数据来源都是student.txt文件,这样做不但可以保证学生数据的一致性,而且可以对学生数据进行永久保存,保证每次运行程序都可以采用原来的数据。
二、设计分析
经过对程序设计题目的分析可知,整个程序的设计实现大致分为七个模块,其中每一个模块对应一个函数,它们的功能分别是:
同学信息录入函数,同学信息更该函数,同学信息删除函数,系统帮助函数,版本信息函数,信息显示函数,个人信息查询函数。
在这些函数当中,前五个函数的实现严格按照题目的要求,而后面的两个函数属于附加功能。
1、程序总体结构图
图1程序总体结构图
2、具体功能框图
(1)同学信息录入函数add
图2同学信息录入函数函数
(2)同学信息更改函数change()
图3同学信息更改函数
(3)删除同学通讯记录函数del
(4)排序函数sort
图4删除同学通讯记录函数
图4删除学生记录函数
(4)同学信息查询函数query()
图5学生信息查询函数
三、主要界面截图
图1程序主界面
图2同学信息录入界面
图3同学详细信息查询界面
图4版本信息界面
四、技术要点
本程序主要由五个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其它函数来实现要求的所有功能。
在这些函数当中,同学信息录入函数和删除同学通讯记录函数是程序中较为核心的部分,下面分别进行说明。
1、同学信息录入函数
添加数据分为两种情况,其一是在学生文件(student.txt)不存在的情况下,首先由程序创建一个新文件,并将录入的学生信息写入该文件当中;其二是在学生文件(student.txt)已经存在的情况下,此时文件要以读写方式或追加的方式打开,这样才可以保证以前已经存在的数据不丢失。
具体的程序段如下:
if((fp=fopen("d:
\\student.txt","r"))==NULL)
{printf("文件打开失败!
\n");
return;
}
else
{
for(i=0;!
feof(fp);i++)
fscanf(fp,"%s%s%s%s%s%s",stu[i].num,stu[i].name,stu[i].age,stu[i].sex,stu[i].tel,stu[i].address);
}
*n=i;
fclose(fp);
}
voidadd()/*添加同学信息*/
{FILE*fp;
intn,i;
structstudentstu;
if((fp=fopen("d:
\\student.txt","w"))!
=NULL)/*新建同学文件并添加信息*/
{
printf("请输入要添加的同学数量,按回车键确认:
");
scanf("%d",&n);
for(i=1;i<=n;i++)
{printf("\n请输入第%d个同学的学号、姓名,年龄,性别,联系电话,住址,用空格分开,并按回车键确认:
\n",i);
scanf("%s%s%s%s%s%s",stu.num,stu.name,stu.age,stu.sex,stu.tel,stu.address);
fprintf(fp,"\n%s%s%s%s%s%s",stu.num,stu.name,stu.age,stu.sex,stu.tel,stu.address);/*学生信息写入文件*/
}
}
fclose(fp);
}
2、删除同学通讯函数
该函数的核心内容是删除算法以及最终对源文件的更新。
该函数执行时,首先调用reads函数将文件中的学生信息读入数组当中,并由用户输入待删除学生的学号,而后按照该学号进行查找,如果文件中存在该学生的数据,则采用删除算法删除,否则输出学生信息不存在的提示信息。
对学生信息的具体删除算法是在结构体数组中实现的,当学生的信息被找到后,位于数组中该学生后面的学生记录依次向前移动一个元素的位置,这些操作完成后,要删除的学生信息就被后面的数组元素覆盖掉了,也就实现了删除。
在数组中删除学生信息后,还要将更改后的信息重新写回文件当中,以保证数据的一致性。
具体程序段如下:
voiddel()/*信息删除函数*/
{structstudentstu[N];
charnumber[20];
FILE*fp;
intn,i,j;
reads(stu,&n);
printf("\n请输入要删除信息的学生学号,按回车键确认:
");
getchar();
scanf("%s",number);
for(i=0;iif(strcmp(number,stu[i].num)==0)break;
if(i>=n)
{printf("没有找到该学生信息!
\n");
return;
}
else
{for(j=i+1;jstu[j-1]=stu[j];
}
if((fp=fopen("d:
\\student.txt","w"))==NULL)/*更新文件*/
{printf("文件打开失败!
");
return;
}
else
{
for(i=0;ifprintf(fp,"\n%s%s%s%s%s%s",stu[i].num,stu[i].name,stu[i].age,stu[i].sex,stu[i].tel,stu[i].address);
}
fclose(fp);
printf("删除成功!
\n");
}
五、个人总结
首先我感觉很幸运能有这次课设的机会,通过这次的课设学习我对C语言知识有了更深一层的认识和了解,提高了对C语言的认识及掌握和操作能力。
这次课设对我的帮助也是很大的,一方面复习了C语言的基础知识;另一方面,再课程设计的过程中也锻炼了我们遇到问题能独立分析问题、解决问题的能力,为我以后工作奠定了一定的基础。
但是我也发现了我学习上的错误,在大一下学期的时候学习C语言,但由于当时学的不是很扎实,在课设刚开始也遇到了一些困难,在这过程中我的程序出了很多问题,就是始终会出现乱码的现象,而且有时出现的错误还修改不会来,但是,最终在老师的检查和自己的努力查找下发现了问题的所在!
在做课设的过程中虽然遇到了很多困难,但最后还是很顺利的完成了本次课设,这与老师,上网查资料和同学的帮助是分不开的。
而且在做的过程中也体会到C语言的用处及应用是十分广泛和强大。
也能更好的使用函数及调用函数问题。
通过这次学习让我更多的认识和掌握了这门十分有用知识,给了自己更多的兴趣去学习C语言!
对这门课程真是越来越喜欢了!
六、参考文献
1谭浩强.C程序设计.北京:
清华大学出版社,2005
2刘成等.C语言程序设计实验指导与习题集.北京:
中国铁道出版社,2006
七、源程序
#include
#include
#include
#include
#defineN20
structstudent
{charnum[20];
charname[10];
charage[20];
charsex[20];
chartel[40];
charaddr[40];
};
voidmenu();
voidreads(structstudentstu[N],int*n);
voidadd();
voidshow();
voiddel();
voidchange();
voidhelp();
voidinformation();
voidquery();
voidinformation();
voidmain()
{
intn;
while
(1)
{
menu();
printf("\n请输入您要选择的操作序号,按回车键确认:
");
scanf("%d",&n);
switch(n)
{case1:
add();break;
case2:
show();break;
case3:
del();break;
case4:
change();break;
case5:
help();break;
case6:
information();break;
case7:
query();break;
case8:
exit(0);
default:
printf("输入错误,请输入列表中存在的序号!
\n");
}
}
}
voidmenu()
{printf("*************************同学通讯录信息管理************************");
printf("\n------------------1添加同学信息------------------");
printf("\n------------------2显示同学信息------------------");
printf("\n------------------3删除同学信息------------------");
printf("\n------------------4更改同学信息------------------");
printf("\n------------------5系统帮助----------------------");
printf("\n------------------6版本信息----------------------");
printf("\n------------------7同学信息查询------------------");
printf("\n------------------8退出--------------------------");
}
voidreads(structstudentstu[N],int*n)
{
FILE*fp;
inti=0;
if((fp=fopen("d:
\\student.txt","r"))==NULL)
{printf("文件打开失败!
\n");
return;
}
else
{
for(i=0;!
feof(fp);i++)
fscanf(fp,"%s%s%s%s%s%s",stu[i].num,stu[i].name,stu[i].age,stu[i].sex,stu[i].tel,stu[i].addr);
}
*n=i;
fclose(fp);
}
voidadd()/*添加同学信息*/
{FILE*fp;
intn,i;
structstudentstu;
if((fp=fopen("d:
\\student.txt","w"))!
=NULL)/*新建学生文件并添加信息*/
{
printf("请输入要添加的学生数量,按回车键确认:
");
scanf("%d",&n);
for(i=1;i<=n;i++)
{printf("\n请输入第%d个学生的学号、姓名,年龄,性别,联系电话,地址,用空格分开,并按回车键确认:
\n",i);
scanf("%s%s%s%s%s%s",stu.num,stu.name,stu.age,stu.sex,stu.tel,stu.addr);
fprintf(fp,"\n%s%s%s%s%s%s",stu.num,stu.name,stu.age,stu.sex,stu.tel,stu.addr);//学生信息写入文件
}
fclose(fp);
}
}
voidshow()/*显示所有同学信息函数*/
{structstudentstu[N];
inti,n;
reads(stu,&n);/*从文件中读出所有同学信息*/
printf("*****************所有的同学通讯信息如下*****************");
for(i=0;iprintf("\n%3d%5s%5s%5s%5s%5s%5s\n",i+1,stu[i].num,stu[i].name,stu[i].age,stu[i].sex,stu[i].tel,stu[i].addr);
getch();
}
voiddel()/*信息删除函数*/
{structstudentstu[N];
charnumber[20];
FILE*fp;
intn,i,j;
reads(stu,&n);
printf("\n请输入要删除信息的学生学号,按回车键确认:
");
getchar();
scanf("%s",number);
for(i=0;iif(strcmp(number,stu[i].num)==0)break;
if(i>=n)
{printf("没有找到该学生信息!
\n");
return;
}
else
{for(j=i+1;jstu[j-1]=stu[j];
}
if((fp=fopen("d:
\\student.txt","w"))==NULL)/*更新文件*/
{printf("文件打开失败!
");
return;
}
else
{
for(i=0;ifprintf(fp,"\n%s%s%s%s%s%s",stu[i].num,stu[i].name,stu[i].age,stu[i].sex,stu[i].tel,stu[i].addr);
}
fclose(fp);
printf("删除成功!
\n");
}
voidchange()
{structstudentstu[N],temp;
intn,i;
FILE*fp;
printf("\n请输入要更改信息的学生学号,按回车键确认:
");
scanf("%s",temp.num);
reads(stu,&n);
for(i=0;iif(strcmp(temp.num,stu[i].num)==0)
break;
if(i>=n)
{printf("无此学生信息!
");
return;
}
printf("\n请输入更改后学生的姓名、年龄、性别,电话和地址,按回车键确认:
\n");
scanf("%s%s%s%s%s",temp.name,temp.age,temp.sex,temp.tel,temp.addr);
stu[i]=temp;
if((fp=fopen("d:
\\student.txt","w"))==NULL)/*更新文件*/
{printf("打开文件失败!
");
return;
}
for(i=0;ifprintf(fp,"\n%s%s%s%s%s%s",stu[i].num,stu[i].name,stu[i].age,stu[i].sex,stu[i].tel,stu[i].addr);
fclose(fp);
printf("修改学生信息成功!
\n");
}
voidhelp()/*系统帮助*/
{
printf("输入您遇到的困难即可\n");
}
voidinformation()/*版本信息*/
{printf("************************版本信息***********************\n");
printf("同学通讯录信息管理\n");
printf("学生杨亚东\n");
printf("班级04070301\n");
printf("版本号2033Y4567\n");
printf("指导老师尹航\n");
printf("完成日期2011.9.22\n");
printf("*******************************************************\n");
}
voidquery()/*同学信息查询*/
{
structstudentstu[N];
charnumber[20];
inti,n;
reads(stu,&n);
printf("\n请输入待查询的学生学号,按回车键确认:
\n");
scanf("%s",number);
for(i=0;iif(strcmp(number,stu[i].num)==0)break;
if(i>=n)
{printf("没有找到该学生信息!
\n");
return;
}
else
printf("\n%5s%5s%5s%5s%5s%5s\n",stu[i].num,stu[i].name,stu[i].age,stu[i].sex,stu[i].tel,stu[i].addr);
}