数据结构与算法课程设计——电话簿管理类1

数据结构与算法课程设计1——电话簿管理类

导读

本文介绍了数据结构与算法课程设计(或者说C语言课程设计)经典的课题——电话簿、通讯簿的管理系统的具体实现,与相关内容。

课程设计的目的

数据结构与算法课程设计是计算机科学与技术专业重要的实践性教学环节之一,设计结合实际应用的要求,使课程设计既覆盖C语言的知识点,又接近工程实际需要。目的是通过课程设计的综合训练,培养学生实际分析问题、解决问题的能力,以及编程和动手能力,最终目标是通过课程设计这种形式,帮助学生系统掌握C语言程序设计和数据结构与算法这两门课程的主要内容,养成良好的编程习惯,更好的完成教学任务。

课题样例

序号课题名称课题要求
1电话簿管理(1)具有加入、删除、显示和查询联系人电话号码的功能。
(2)电话号码簿按姓名排序存放,显示时每屏不超过20个记录,超过时分屏。
(3)增加记录修改功能,能选择修改用户的姓名、电话、在删除或修改之前需要用户进一步确认,确认无误后再进行操作。
(4)增加录入时间的显示及存储。
(5)增加默认的查询方式,及查询时只输入姓名的首字母,所有符合这一条件的电话资料均在屏幕的显示。
2通讯薄管理(1)依次输入通讯薄的编号,用户名和电话号码,并生成一个.txt文本文件。
(2)可添加和删除通讯薄中的内容。
(3)可以修改通讯薄中某个用户的用户名或电话号码。
3同学通讯录(1) 通讯录编辑(添加、删除);
(2) 按不同的项进行查找;
(3) 对已存在的通讯录按不同的项排序;
(4) 将通讯录写入文件;
(5) 从文件读入通讯录。
备注:通讯录至少应该有以下数据项:姓名,地址,电话,邮编,E-mail。
~~~

类似于上表中的题目在大家课程设计的选题的范围上,一定不可或缺,下面就列举出几个解决这类问题的课程设计的思路:
1.通讯通讯录
任务:
以本班同学的具体数据为背景,设计一个本班同学通讯录。
实现功能:
1) 通讯录编辑(添加、删除)。
2) 按不同的项进行查找。
3) 对已存在的通讯录按不同的项排序。
4) 将通讯录写入文件
5)从文件读入通讯录
备注:通讯录至少应该有以下数据项:
姓名,地址,电话,邮编,E-mail。

相关设计:

在这里插入图片描述

在这里插入图片描述
系统功能需求:
<1>记录功能:记录每位同学的姓名、电话号码、地址、邮编和E-mail
<2>查找功能:按不同方式查找信息
<3>添加功能:添加信息
<4>排序功能:将信息按照姓名排序
<5>删除功能:删除指定的信息
<6>保存在文件:将做完的信息保存在文件
<7>结束:结束程序
函数说明
选择功能函数

void next()
{
	void show();
	void seek();
	void add();
	void sort();
	void out();
	void keep();
	int end();
	int b;
	printf("\t***********************NEXT**************************\n");
	printf("\t请选择接下来的操作:");
	scanf("%d",&b);
	printf("\t*****************************************************\n");
	switch(b)
	{
		case 1 :show();break;
		case 2 :seek();break;
		case 3 :add();break;
		case 4 :sort();break;
		case 5 :out();break;
		case 6 :keep();break;
		case 7 :end();break;
	}
}

输入函数

void write()
{
	void next();
	void write1();
	printf("\t请输入信息(每次输入1时继续输入,输入2时停止输入)\n");
	printf("\t姓名\t家庭电话\t地址\t邮编\tE-mail\n");
	write1();
}
void write1()
{
	void next();
	void write2();
	int a;
	printf("是否输入:");
	scanf("%d",&a);
	printf("\n");
	switch(a)
	{
	    case 1 :write2();break;
		    case 2 :next();break;
	}
}
void write2()
{
	void write1();
j=i+1;
	printf("%d\t",j);
	scanf("%s%d%s%d%s",stu[i].name,&stu[i].phone,stu[i].adress,&stu[i].postcode,stu[i].e_mail);
	i=i+1;
	write1();
}

输出函数

void show()
{
	void next();
	int s=0;
	printf("\t下面将会显示输入的数据:\n");
	printf("\t姓名\t家庭电话\t地址\t邮编\tE-mail\n");
	for(i=0;i<j;i++)
	{
		s=s+1;
		printf("%d\t%s\t%d\t%s\t%d\t%s\n",s,stu[i].name,stu[i].phone,stu[i].adress,stu[i].postcode,stu[i].e_mail);
	}
	printf("\t显示结束\n");
	next();
}

查找函数

查找函数
void seek()
{
	int q;
	void numberseek();
	void nameseek();
	printf("\t请选择搜索方式:1~按名字查找\n\t                2~按家庭电话号码查找\n");
	printf("\t请选择查找方式:");
	scanf("%d",&q);
	switch(q)
	{
	    case 1 :nameseek();break;
		case 2 :numberseek();break;
	}

}
void nameseek()
{
	void next();
	char d[5];
	printf("\t请输入要查找学生的名字:");
	scanf("%s",d);
	for(i=0;i<j;i++)
	{
		if(strcmp(d,stu[i].name)==0)
		{
			printf("\t你要查找的学生信息为:\n");
			printf("\t姓名\t家庭电话\t地址\t邮编\tE-mail\n");
			printf("\t%s\t%d\t%s\t%d\t%s\n",stu[i].name,stu[i].phone,stu[i].adress,stu[i].postcode,stu[i].e_mail);
			break;
		}
		else
			continue;
	}
	next();
}
void numberseek()
{
	void next();
	int e;
	printf("\t请输入要查找的电话号码:");
	scanf("%d",&e);
	for(i=0;i<j;i++)
	{
 		if(e==stu[i].phone)
		{
			printf("\t你要查找的学生信息为:\n");
			printf("\t姓名\t家庭电话\t地址\t邮编\tE-mail\n");
			printf("\t%s\t%d\t%s\t%d\t%s\n",stu[i].name,stu[i].phone,stu[i].adress,stu[i].postcode,stu[i].e_mail);
			break;
		}
		else
			continue;
	}
	next();
}

添加函数

void add()
{
	void next();
	void write1();
	i=j;
	printf("\t请输入信息(每次输入1时继续输入,输入2时停止输入)\n");
	printf("\t姓名\t家庭电话\t地址\t邮编\tE-mail\n");
	write1();
}

排序函数

void sort()
{
	void next();
	void show();
	int h,g,x;
	char temp;
	for(i=0;i<(j-1);i++)
	{
		h=i;
		for(g=i+1;g<j;g++)
		{
			if(strcmp(stu[h].name,stu[g].name)==0)
				h=g;
			if(h!=i)
			{
				strcpy(temp,stu[i].name);strcpy(stu[i].name,stu[h].name);strcpy(stu[h].name,temp);
		        x=stu[i].phone;stu[i].phone=stu[h].phone;stu[h].phone=temp;
	            strcpy(temp,stu[i].adress);strcpy(stu[i].adress,stu[h].adress);strcpy(stu[h].adress,temp);
		        x=stu[i].postcode;stu[i].postcode=stu[h].postcode;stu[h].postcode=temp;
				strcpy(temp,stu[i].e_mail);strcpy(stu[i].e_mail,stu[h].e_mail);strcpy(stu[h].e_mail,temp);
			}
		}
	}
	printf("排序成功\n");
	show();
}

删除函数

void out()
{
	void next();
	int t,h,v;
	printf("\t请输入要删除的学生编号:");
	scanf("%d",&t);
	h=i;
	for(v=t-1;v<h;v++)
	{
		strcpy(stu[v].name,stu[v+1].name);
		stu[v].phone=stu[v+1].phone;
		strcpy(stu[v].adress,stu[v+1].adress);
		stu[v].postcode=stu[v+1].postcode;
		strcpy(stu[v].e_mail,stu[v+1].e_mail);
	}
	j=j-1;
	printf("\t删除完毕\n");
	next();
}

保存函数

void keep()
{
	void next();
	FILE *fp;
	int v=0;
	char filename[10];
	printf("请输入要保存的文件名:");
	scanf("%s",filename);
	if((fp=fopen(filename,"w"))==NULL)
	{
		printf("文件无法打开\n");
		exit(0);
	}
	fprintf(fp,"\t姓名\t电话号\t地址\t邮编\tE-mail\n");
	for(i=0;i<j;i++)
	{
		v=v+1;
		fprintf(fp,"%d\t%s\t%d\t%s\t%d\t%s\n",v,stu[i].name,stu[i].phone,stu[i].adress,stu[i].postcode,stu[i].e_mail);
	}
	fclose(fp);
	printf("已经保存在文件%s中",filename);
	next();
}

结束函数

int end()
{
	void next();
	int g;
	printf("\t是否关闭程序:\n1:是\t2:否\n");
	printf("\t请输入你的选择:");
	scanf("%d",&g);
	switch(g)
	{
	    case 1 :return 0;
		case 2 :next();
	}
return 0;
}

程序源代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Student
{
	char name[20];
    int long phone;
	char adress[40];
	int postcode;
	char e_mail[30];
}stu[100];
int j=0,i=0;
void next()
{
	void show();
	void seek();
	void add();
	void sort();
	void out();
	void keep();
	int end();
	int b;
	printf("\t***********************NEXT**************************\n");
	printf("\t请选择接下来的操作:");
	scanf("%d",&b);
	printf("\t*****************************************************\n");
	switch(b)
	{
		case 1 :show();break;
		case 2 :seek();break;
		case 3 :add();break;
		case 4 :sort();break;
		case 5 :out();break;
		case 6 :keep();break;
		case 7 :end();break;
	}
}
void write()
{
	void next();
	void write1();
	printf("\t请输入信息(每次输入1时继续输入,输入2时停止输入)\n");
	printf("\t姓名\t家庭电话\t地址\t邮编\tE-mail\n");
	write1();
}
void write1()
{
	void next();
	void write2();
	int a;
	printf("是否输入:");
	scanf("%d",&a);
	printf("\n");
	switch(a)
	{
	    case 1 :write2();break;
		case 2 :next();break;
	}
}
void write2()
{
	void write1();
	j=i+1;
	printf("%d\t",j);
	scanf("%s%d%s%d%s",stu[i].name,&stu[i].phone,stu[i].adress,&stu[i].postcode,stu[i].e_mail);
	i=i+1;
	write1();
}
void show()
{
	void next();
	int s=0;
	printf("\t下面将会显示输入的数据:\n");
	printf("\t姓名\t家庭电话\t地址\t邮编\tE-mail\n");
	for(i=0;i<j;i++)
	{
		s=s+1;
		printf("%d\t%s\t%d\t%s\t%d\t%s\n",s,stu[i].name,stu[i].phone,stu[i].adress,stu[i].postcode,stu[i].e_mail);
	}
	printf("\t显示结束\n");
	next();
}
void seek()
{
	int q;
	void numberseek();
	void nameseek();
	printf("\t请选择搜索方式:1~按名字查找\n\t                2~按家庭电话号码查找\n");
	printf("\t请选择查找方式:");
	scanf("%d",&q);
	switch(q)
	{
	    case 1 :nameseek();break;
		case 2 :numberseek();break;
	}

}
void nameseek()
{
	void next();
	char d[5];
	printf("\t请输入要查找学生的名字:");
	scanf("%s",d);
	for(i=0;i<j;i++)
	{
		if(strcmp(d,stu[i].name)==0)
		{
			printf("\t你要查找的学生信息为:\n");
			printf("\t姓名\t家庭电话\t地址\t邮编\tE-mail\n");
			printf("\t%s\t%d\t%s\t%d\t%s\n",stu[i].name,stu[i].phone,stu[i].adress,stu[i].postcode,stu[i].e_mail);
			break;
		}
		else
			continue;
	}
	next();
}
void numberseek()
{
	void next();
	int e;
	printf("\t请输入要查找的电话号码:");
	scanf("%d",&e);
	for(i=0;i<j;i++)
	{
 		if(e==stu[i].phone)
		{
			printf("\t你要查找的学生信息为:\n");
			printf("\t姓名\t家庭电话\t地址\t邮编\tE-mail\n");
			printf("\t%s\t%d\t%s\t%d\t%s\n",stu[i].name,stu[i].phone,stu[i].adress,stu[i].postcode,stu[i].e_mail);
			break;
		}
		else
			continue;
	}
	next();
}
void add()
{
	void next();
	void write1();
	i=j;
	printf("\t请输入信息(每次输入1时继续输入,输入2时停止输入)\n");
	printf("\t姓名\t家庭电话\t地址\t邮编\tE-mail\n");
	write1();
}
void sort()
{
	void next();
	void show();
	int h,g,x;
	char temp;
	for(i=0;i<(j-1);i++)
	{
		h=i;
		for(g=i+1;g<j;g++)
		{
			if(strcmp(stu[h].name,stu[g].name)==0)
				h=g;
			if(h!=i)
			{
				strcpy(temp,stu[i].name);strcpy(stu[i].name,stu[h].name);strcpy(stu[h].name,temp);
		        x=stu[i].phone;stu[i].phone=stu[h].phone;stu[h].phone=temp;
	            strcpy(temp,stu[i].adress);strcpy(stu[i].adress,stu[h].adress);strcpy(stu[h].adress,temp);
		        x=stu[i].postcode;stu[i].postcode=stu[h].postcode;stu[h].postcode=temp;
				strcpy(temp,stu[i].e_mail);strcpy(stu[i].e_mail,stu[h].e_mail);strcpy(stu[h].e_mail,temp);
			}
		}
	}
	printf("排序成功\n");
	show();
}
void out()
{
	void next();
	int t,h,v;
	printf("\t请输入要删除的学生编号:");
	scanf("%d",&t);
	h=i;
	for(v=t-1;v<h;v++)
	{
		strcpy(stu[v].name,stu[v+1].name);
		stu[v].phone=stu[v+1].phone;
		strcpy(stu[v].adress,stu[v+1].adress);
		stu[v].postcode=stu[v+1].postcode;
		strcpy(stu[v].e_mail,stu[v+1].e_mail);
	}
	j=j-1;
	printf("\t删除完毕\n");
	next();
}
void keep()
{
	void next();
	FILE *fp;
	int v=0;
	char filename[10];
	printf("请输入要保存的文件名:");
	scanf("%s",filename);
	if((fp=fopen(filename,"w"))==NULL)
	{
		printf("文件无法打开\n");
		exit(0);
	}
	fprintf(fp,"\t姓名\t电话号\t地址\t邮编\tE-mail\n");
	for(i=0;i<j;i++)
	{
		v=v+1;
		fprintf(fp,"%d\t%s\t%d\t%s\t%d\t%s\n",v,stu[i].name,stu[i].phone,stu[i].adress,stu[i].postcode,stu[i].e_mail);
	}
	fclose(fp);
	printf("已经保存在文件%s中\n",filename);
	next();
}
int end()
{
	void next();
	int g;
	printf("\t是否关闭程序:\n1:是\t2:否\n");
	printf("\t请输入你的选择:");
	scanf("%d",&g);
	switch(g)
	{
	    case 1 :return 0;
		case 2 :next();
	}
return 0;
}
int main()
{
	int ch;
	printf("\t********************开始*********************\n\n");
    printf("\t    1. 显示通讯录\n");
    printf("\t    2. 查找\n");
    printf("\t    3. 添加通讯录\n");
    printf("\t    4. 按姓名排序\n");
    printf("\t    5. 删除通讯录\n");
    printf("\t    6. 将记录保存在文件\n");
    printf("\t    7. 结束\n");
    printf("\t***********************************************\n");
	printf("\t请先输入信息\n");
	write();
	return 0;
}

在这里插入图片描述在这里插入图片描述


版权声明:本文为weixin_51430436原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。