计算机科学与应用系课程设计实用的小型通讯录.docx
- 文档编号:5679593
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:34
- 大小:1,016.78KB
计算机科学与应用系课程设计实用的小型通讯录.docx
《计算机科学与应用系课程设计实用的小型通讯录.docx》由会员分享,可在线阅读,更多相关《计算机科学与应用系课程设计实用的小型通讯录.docx(34页珍藏版)》请在冰豆网上搜索。
计算机科学与应用系课程设计实用的小型通讯录
程序类课程设计
报告书
题目:
实用的小型通讯录
系别:
计算机科学与应用
目录
1.设计内容与设计要求3
2.系统需求分析3
3.程序运行4
4.附录11
5.总结29
指导教师评语:
30
1.设计内容与设计要求
1.1系统的基本功能
(1)添加:
从键盘上录入同学录的相关信息,包括姓名、手机号、住址、班级,学号等信息。
(2)编辑(修改和删除):
修改或删除某条同学录的信息。
(3)查找:
按姓名进行查找。
(4)显示:
将同学录信息显示出来。
(5)排序:
按同学录信息有关项进行排序(根据姓氏英文字母顺序排列)。
(6)文件载入:
把信息输入相关的数据结构中。
(7)保存:
将同学录信息保存到文件中。
1.2系统的设计要求
要求可实现按姓名排序很方便的来为我们显示所查找的记录。
例如在按姓名查找的过程中c和h开头的名字会以c开头的排在前面。
2.系统需求分析
2.1系统设计目标
(1)此系统能完成个人信息的添加、查找、显示、文件保存、文件载入、删除、修改、排序。
(2)要求在执行一个具体的功能之后,能够让程序自动显示出主菜单。
(3)可以将录入的数据保存在.txt文件中。
2.2系统设计框图
系统设计框图如图2-1所示:
图2-1系统设计框图
3.程序运行
(1)、控制台应用程序界面如下所示:
(2)、输入Y,按下回车键:
(3)、输入1,按下回车键,填写小张个人信息:
(4)、输入Y,按下回车键,以此类推,填写小王,小李,小赵个人信息:
(5)、输入N,按下回车键;输入2,按下回车键,输入小赵,按下回车键:
(6)、按下回车键,输入3,按下回车键:
(7)、输入2,按下回车键;输入c,按下回车键;输入5班,按下回车键;输入Y,按下回车键:
(8)、输入回车键,输入4,按下回车键,依次填写小刘,小杨个人信息:
(9)、输入N,按下回车键;输入6,按下回车键:
(10)、输入5,按下回车键:
(11)、输入4,按下回车键;输入Y,按下两次回车键:
(12)、输入6,按下回车键:
(13)、按下回车键;输入7,按下回车键;输入Y,按下回车键:
4.附录
附录1源代码
#include
#include
#include
#defineLENsizeof(structlinker)
//结构体
typedefstructlinker
{
charnum[21];//学号
charname[20];//姓名
charbanji[21];//班级
chartel[12];//电话
charaddr[11];//地址
structlinker*next;
}link;
voidwelcome()//欢迎界面
{
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("***********************\n");
printf("**\n");
printf("**\n");
printf("**\n");
printf("**\n");
printf("*欢迎使用:
同学录*\n");
printf("**\n");
printf("**\n");
printf("**\n");
printf("**\n");
printf("***********************\n");
printf("请按提示操作:
\n");
printf("是否进入(Y/N):
");
}
voidmenu()//菜单界面
{
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*\n");
printf("**\n");
printf("**\n");
printf("*[1]新建:
*\n");
printf("*[2]查询:
*\n");
printf("*[3]修改:
*\n");
printf("*[4]添加:
*\n");
printf("*[5]删除:
*\n");
printf("*[6]排序:
*\n");
printf("*[7]退出:
*\n");
printf("**\n");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*\n");
printf("请输入数字(1-7):
");
}
link*creat()//创建一个链表
{
link*head;
link*p1,*p2;
charidentify,absorb;
p1=p2=(link*)malloc(LEN);
head=p1;
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("学号:
");
gets(p1->num);
printf("姓名:
");
gets(p1->name);
printf("班级:
");
gets(p1->banji);
printf("电话:
");
gets(p1->tel);
printf("地址:
");
gets(p1->addr);
printf("\n");
printf("\n");
printf("内容已保存,是否继续?
(Y/N):
");
scanf("%c",&identify);
scanf("%c",&absorb);
while(identify!
='y'&&identify!
='Y'&&identify!
='n'&&identify!
='N')
{
printf("请输入(Y/N):
");
scanf("%c",&identify);
scanf("%c",&absorb);
}
while(identify=='y'||identify=='Y')
{
p2->next=p1;
p2=p1;
p1=(link*)malloc(LEN);
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("学号:
");
gets(p1->num);
printf("姓名:
");
gets(p1->name);
printf("班级:
");
gets(p1->banji);
printf("电话:
");
gets(p1->tel);
printf("地址:
");
gets(p1->addr);
printf("\n");
printf("\n");
printf("内容已保存,是否继续?
(Y/N):
");
scanf("%c",&identify);
scanf("%c",&absorb);
while(identify!
='y'&&identify!
='Y'&&identify!
='n'&&identify!
='N')
{
printf("请输入(Y/N):
");
scanf("%c",&identify);
scanf("%c",&absorb);
}
}
p2->next=p1;
p2=p1;
p2->next=NULL;
return(head);
}
link*print(link*head)//输出全部记录
{
link*p1,*p2,*p3;
charnum[21];
charname[20];
charbanji[21];
chartel[12];
charaddr[11];
p3=head;
p1=head;
p2=head;
intn=0;
while(p2!
=NULL)//将链表中记录按学号顺序排列
{
p1=p2;
while(p1!
=NULL)
{
if(strcmp(p2->name,p1->name)>0)
{
strcpy(num,p2->num);
strcpy(p2->num,p1->num);
strcpy(p1->num,num);
strcpy(name,p2->name);
strcpy(p2->name,p1->name);
strcpy(p1->name,name);
strcpy(banji,p2->banji);
strcpy(p2->banji,p1->banji);
strcpy(p1->banji,banji);
strcpy(tel,p2->tel);
strcpy(p2->tel,p1->tel);
strcpy(p1->tel,tel);
strcpy(addr,p2->addr);
strcpy(p2->addr,p1->addr);
strcpy(p1->addr,addr);
}
p1=p1->next;
}
p2=p2->next;
}
printf("\n");
printf("\n");
printf("序号\t学号\t\t姓名\t\t\t班级\t\t\t电话\t\t地址\n");
//p3=head;
do//输出链表中信息
{
n++;
printf("%d\t%-10s\t%-15s\t\t%-15s\t\t%-15s\t%-15s\n",n,p3->num,p3->name,p3->banji,p3->tel,p3->addr);
p3=p3->next;
}while(p3!
=NULL);
return(head);
}
link*insert(link*head)//添加
{
link*pp1=NULL,*pp2=NULL;
charidentify,absorb;
do
{
pp1=head;
pp2=(link*)malloc(LEN);
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("学号:
");
gets(pp2->num);
printf("姓名:
");
gets(pp2->name);
printf("班级:
");
gets(pp2->banji);
printf("电话:
");
gets(pp2->tel);
printf("地址:
");
gets(pp2->addr);
while(pp1->next!
=NULL)
pp1=pp1->next;
pp1->next=pp2;
pp2->next=NULL;
printf("\n");
printf("\n");
printf("内容已保存,是否继续?
(Y/N):
");
scanf("%c",&identify);
scanf("%c",&absorb);
while(identify!
='y'&&identify!
='Y'&&identify!
='n'&&identify!
='N')
{
printf("请输入(Y/N):
");
scanf("%c",&identify);
scanf("%c",&absorb);
}
}while(identify!
='n'&&identify!
='N');
return(head);
}
link*change(link*head)//改变记录中的信息
{
link*p1,*p3;
p1=p3=head;
print(p3);
intchoose,i,n=0;
char_choose,absorb,identify;
charinput[21];
printf("\n");
printf("\n");
printf("请输入需修改内容所在行序列号:
");
scanf("%d",&choose);
scanf("%c",&absorb);
while(p1!
=NULL)//计算链表中记录数目
{
n++;
p1=p1->next;
}
p1=head;
while(choose<0||choose>n)
{
printf("查无此内容,请确认后重新输入:
");
scanf("%d",&choose);
scanf("%c",&absorb);
}
printf("\n");
for(i=1;i p1=p1->next; printf("a.学号b.姓名c.班级d.电话e.地址\n"); printf("请输入修改内容类型: "); scanf("%c",&_choose); scanf("%c",&absorb); printf("\n"); printf("请输入修改内容: "); gets(input); printf("\n"); printf("确认要替换吗? (Y/N): "); scanf("%c",&identify); scanf("%c",&absorb); printf("\n"); while(identify! ='y'&&identify! ='Y'&&identify! ='n'&&identify! ='N') { printf("请输入(Y/N): "); scanf("%c",&identify); } if(identify=='y'||identify=='Y') {switch(_choose) {case'a': strcpy(p1->num,input); printf("内容已修改,按任意键返回。 "); break; case'b': strcpy(p1->name,input); printf("内容已修改,按任意键返回。 "); break; case'c': strcpy(p1->banji,input); printf("内容已修改,按任意键返回。 "); break; case'd': strcpy(p1->tel,input); printf("内容已修改,按任意键返回。 "); break; case'e': strcpy(p1->addr,input); printf("内容已修改,按任意键返回。 "); break; } } getchar(); return(head); } voidsearch(link*head)//查找记录,支持模糊查找 { charfullname[9]; printf("\n"); printf("\n"); printf("请输入姓名: "); gets(fullname); link*p1; char_name[9]=""; intn=0; p1=head; printf("\n"); printf("序号\t学号\t\t姓名\t\t\t班级\t\t\t电话\t\t地址\n"); while(p1! =NULL) { strncpy(_name,p1->name,strlen(fullname));//按输入姓名字符数截取每个姓名,和输入姓名比较 if(strcmp(fullname,_name)==0) { n++;//计算链表中记录的序号 printf("%-5d\t%-10s\t%-15s\t\t%-15s\t\t%-15s\t%-15s\n",n,p1->num,p1->name,p1->banji,p1->tel,p1->addr); p1=p1->next; } else p1=p1->next; } printf("\n"); printf("共找到%d条信息,按任意键返回。 ",n); getchar(); } link*delet(link*head)//删除一条记录 { print(head); link*p1,*p2,*pp; charabsorb,identify; inti,choose,n=0; p1=p2=pp=head; printf("\n"); printf("请选择要删除的内容所在行的序号: "); scanf("%d",&choose); scanf("%c",&absorb); while(p1! =NULL)//计算链表中的记录数目 { n++; p1=p1->next; } p1=head; while(choose<0||choose>n) { printf("查无此内容,请确认后重新输入: "); scanf("%d",&choose); scanf("%c",&absorb); } printf("确认要删除吗? (Y/N)"); scanf("%c",&identify); while(identify! ='y'&&identify! ='Y'&&identify! ='n'&&identify! ='N') { printf("请输入(Y/N): "); scanf("%c",&identify); } if(identify=='y'||identify=='Y') { if(choose==1) { p1=p1->next; head=p1; free(pp);//释放删除结点所占内存 } else { for(i=1;i { p2=p1; p1=p1->next; } p2->next=p1->next; free(p1);////释放删除结点所占内存 } printf("已成功删除,按任意键返回。 "); getchar(); } return(head); } voidsaves(link*p)//将原文件中内容清空,将链表中的内容存入文件 { FILE*fp; if((fp=fopen("tongxuelu.txt","w"))==NULL) { printf("无法打开文件~~~\n"); exit(0); } while(p! =NULL) { fwrite(p,LEN,1,fp); p=p->next; } fclose(fp); } link*SortNum(link*head)//排序 { link*front,*node,*temp,*p,*end=NULL,message; if(head==NULL) { printf("没有信息! \n"); returnNULL; } for(node=head;node->next! =NULL;node=node->next) { for(front=head,temp=head->next;temp! =end;temp=temp->next,front=front->next) if(front->num>temp->num) { message=*front; *front=*temp; *temp=message; p=front->next; front->next=temp->next; temp->next=p; } end=front; } returnhead; } voidmain() { FILE*fp; charidentify; link*head,*p,*p1,*p2,*p3; intchoose; charabsorb; inti; head=NULL; welcome(); do//确定输入是否为y或Y或n或N { scanf("%c",&identify); scanf("%c",&absorb); if(identify=='y'||identify=='Y') printf("Thankyouruse\n"); else if(identify=='n'||identify=='N') exit(0); else printf("请输入(Y/N): "); }while(identify! ='y'&&identify! ='Y'&&identify! ='n'&&identify! ='N'); while (1) { menu(); scanf("%d",&choose); scanf("%c",&absorb); switch(choose)//新建 { case1: head=creat();//创建链表,并将链表中的信息输入到文件中 saves(head); break; case2: i=0;//查找 if((fp=fopen("tongxuelu.txt","a+")
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机科学 应用 课程设计 实用 小型 通讯录