C语言课程设计_通讯录管理系统

任务

以本班同学的具体数据为背景,设计一个本班同学通讯录。

实现功能

1)  通讯录编辑(添加、删除)。

2)  按不同的项进行查找。

3)  对已存在的通讯录按不同的项排序。

4)  将通讯录写入文件

5)从文件读入通讯录

备注:通讯录至少应该有以下数据项:

姓名,地址,电话,邮编,E-mail。

概要设计

(1)人数不定,每输入一个人编号。

(2)记录每位同学的姓名、电话号码、地址、邮编和E-mail。 

(3)可对记录中的姓名和电话号码等进行修改。

(4)可增加或删除记录

(5)加入查询功能,通过姓名或电话号码查询到同学的条目。

(6)在开始画面加入简单的菜单便于选择功能。

(7)将信息保存在文件。

详细设计 

 1.数据结构和系统框架

 1.主要流程:

2. 主要功能

 

系统功能需求:

<1>记录功能:记录每位同学的姓名、电话号码、地址、邮编和E-mail

<2>查找功能:按不同方式查找信息

<3>添加功能:添加信息

<4>排序功能:将信息按照姓名排序

<5>删除功能:删除指定的信息

<6>保存在文件:将做完的信息保存在文件

<7>结束:结束程序

3.函数说明

选择功能函数

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-mailn");
	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("%dt",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-mailn");
	for(i=0;i<j;i++)
	{
		s=s+1;
		printf("%dt%st%dt%st%dt%sn",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~按名字查找nt                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-mailn");
			printf("t%st%dt%st%dt%sn",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-mailn");
			printf("t%st%dt%st%dt%sn",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-mailn");
	write1();
}

 课程设计成果

 程序源代码

#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-mailn");
	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("%dt",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-mailn");
	for(i=0;i<j;i++)
	{
		s=s+1;
		printf("%dt%st%dt%st%dt%sn",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~按名字查找nt                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-mailn");
			printf("t%st%dt%st%dt%sn",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-mailn");
			printf("t%st%dt%st%dt%sn",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-mailn");
	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-mailn");
	for(i=0;i<j;i++)
	{
		v=v+1;
		fprintf(fp,"%dt%st%dt%st%dt%sn",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********************开始*********************nn");
    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;
}

课程设计心得 

通过为期一周的课程设计,我对《C语言》这门课程有了更深一步的了解。它是计算机程序设计的重要理论技术基础,在我们信息与计算科学专业的学习中占据着十分重要的地位。同时也使我知道,要学好这门课程,仅学习书本上的知识是不够的,还要有较强的实践能力。因为我学习知识就是为了实践。而只有多实践,多编写程序,才能更好的理解与掌握书本上的东西。

附件:源码下载

C语言课程设计-通讯录管理系统_c语言课程设计之通讯录管理系统资源-CSDN文库icon-default.png?t=N176https://download.csdn.net/download/NBITer/87369754