C/C++课程设计:通讯录管理系统(含课程设计报告书,支持答辩)


引言

本课程设计采用C/C++进行编程,实现了通讯录中基本的增删改查操作,以及算法的编写,并且附带完整的课程设计报告书,可支持答辩!额外添加文件读写处理功能(内存与外存同步)
 
资源中相关文件的依赖关系已经引入好,无需其他配置,为此直接运行资源中的.cpp文件即可!!!
 
如果需要根据特殊需求特别定制课设或者是参赛使用的项目可以私聊详谈,或者通过资源内部的Tip.txt提供的QQ邮箱直接联系。非诚勿扰!!!


一、总览

如有需要请前往下载

项目资源总览


二、核心代码

部分展示!!!

结构体定义

typedef struct{
	char Name[18];
	char Tel[12];
	char QQ[11];
	char Emial[19];
	char Address[MAXSIZE];
}information,*Information;

typedef Information ElemType;

typedef struct{
	ElemType *elem;
	int length;
}SqList;

快排

//快排
int Partiton(SqList &L,int low,int high,int choice){
	ClearPartList(L,0);
	if(choice==1){
		ListExchange(L,0,low);
		while(low<high){
			while(low<high&&strcmp(L.elem[high]->Name,L.elem[0]->Name)>=0){
				high--;
			}
			ListExchange(L,low,high);
			while(low<high&&strcmp(L.elem[low]->Name,L.elem[0]->Name)<=0){
				low++;
			}
			ListExchange(L,high,low);		
		}
		ListExchange(L,low,0);
	}else if(choice==2){
		ListExchange(L,0,low);
		while(low<high){
			while(low<high&&strcmp(L.elem[high]->Tel,L.elem[0]->Tel)>=0){
				high--;
			}
			ListExchange(L,low,high);
			while(low<high&&strcmp(L.elem[low]->Tel,L.elem[0]->Tel)<=0){
				low++;
			}
			ListExchange(L,high,low);
		}
		ListExchange(L,low,0);
	}else if(choice==3){
		ListExchange(L,0,low);
		while(low<high){
			while(low<high&&strcmp(L.elem[high]->QQ,L.elem[0]->QQ)>=0){
				high--;
			}
			ListExchange(L,low,high);
			while(low<high&&strcmp(L.elem[low]->QQ,L.elem[0]->QQ)<=0){
				low++;
			}
			ListExchange(L,high,low);
		}
		ListExchange(L,low,0);
	}
	return low;
}

文件读写处理

  • 从外存里读取通讯录的信息到内存
bool ExternalReadList(SqList &L){
	FILE *file=NULL;
	file=fopen("通讯录.txt","r");
	char NameBuff[18];
	char TelBuff[12];
	char QQBuff[11];
	char EmialBuff[19];
	char AddressBuff[MAXSIZE];
	fgets(NameBuff,19,file);
	while(NameBuff[0]!='#'){
		L.length++;
		L.elem[L.length]=new information;
		ClearPartList(L,ListLength(L));
		NameBuff[strlen(NameBuff)-1]=0;
		strcpy(L.elem[L.length]->Name,NameBuff);
		fgets(TelBuff,13,file);
		TelBuff[strlen(TelBuff)-1]=0;
		strcpy(L.elem[L.length]->Tel,TelBuff);
		fgets(QQBuff,12,file);
		QQBuff[strlen(QQBuff)-1]=0;
		strcpy(L.elem[L.length]->QQ,QQBuff);
		fgets(EmialBuff,21,file);
		EmialBuff[strlen(EmialBuff)-1]=0;
		strcpy(L.elem[L.length]->Emial,EmialBuff);
		fgets(AddressBuff,MAXSIZE,file);
		AddressBuff[strlen(AddressBuff)-1]=0;
		strcpy(L.elem[L.length]->Address,AddressBuff);
		fgets(NameBuff,19,file);
	}
	return true;
}
  • 将内存的通讯录信息写入到外存
bool ExternalWriteList(SqList &L){
	FILE *file=NULL;
	file=fopen("通讯录.txt","w");
	int counter=0;
	while(counter<ListLength(L)){
		counter++;
		fprintf(file,"%s\n",L.elem[counter]->Name);
		fprintf(file,"%s\n",L.elem[counter]->Tel);
		fprintf(file,"%s\n",L.elem[counter]->QQ);
		fprintf(file,"%s\n",L.elem[counter]->Emial);
		fprintf(file,"%s\n",L.elem[counter]->Address);
	}
	fprintf(file,"#");
	return true;
}

三、运行截图

程序初始化、交互界面

交互界面

添加功能

添加

显示功能

可以根据不同的关键内容排序显示(会从外部文件读取已存在的联系人信息)

显示

查找功能

查找

修改功能

修改

删除功能

删除


四、课程设计报告书

以下仅给出每一章节的一部分作为参考,实际的课程设计报告书的内容完整且符合书写规范(包含空间复杂度、时间复杂度分析,并且报告书的排版缩进正确,其中的每张截图和流程图的图片下标符合命名规范);具体情况可以根据自己的需要适当修改

报告书
以下仅展示每一章的开头部分,如需完整获取,请前往下载
目录
第1章
第2章
第3章
第4章总结
参考文献


温馨提示

  1. 请在拥有C/C++可运行的基本环境下对程序进行编译并且运行
  2. 程序运行之初会直接读外部文件“通讯录.txt”的内容进行读取,写入到内存;当程序正常结束时,会将内存内容写回外部文件“通讯录.txt”进行保存
  3. 解压后的整个文件夹以及里面的相关文件不要随意重命名或者移动,之后用编译器打开里面的.cpp文件即可编译运行;推荐一个C/C++的编译器(界面可以设置为中文):https://download.csdn.net/download/jzycloud/14112780
  4. 获取资源后,如果发现编译运行不了或者有其他问题,可以通过资源里的Tip.txt文件提供的联系方式联系博主!
  5. 有特别需求或结构、算法设计的,需要定制项目的(可以使用不同语言、技术和框架),私聊或者通过资源里的Tip.txt文件提供的联系方式联系博主,非诚勿扰,感谢!

免责申明:相关文章及资料仅供学习交流使用,禁止一切不正当行为,如由此产生相关责任,自行承担
 
Tip:如需转发或引用相关内容,请务必附带原链接


如果对你有帮助的话,麻烦关注一波,并且点赞、收藏、转发一下哦o( ̄︶ ̄)o!如果有问题或者发现Bug欢迎提出反馈!

一:需求分析 二:总体设计 三:详细设计 四:调试与测试 五;测试结果 六:本次课程设计的心得体会 七:附录 本程序设计亮点介绍(及)改进方面 1.在修改函数中,可以实现单条记录修改(运用switch) 2.查询函数中,能返回该函数继续查询(运用了递归) 3.使用变量少,仅通过变量i的递加和表示成员数的变量n就实现了数据结构体之间的联 系 4.界面美观,使用方便 5.允许编号输入为字符 6.在显示函数上能够分屏显示(换页) 缺点 在输入数据时,未输完一个成员的所有信息不能退出输入 一:需求分析 A.需要实现的功能有:输入功能、输出功能、显示功能、查找功能、以及增加、删 除、修改功能。输入功能要求一次完成若干信息的输入;显示功能要能完成所有信息的 显示,并且自动分页;查找可以通过多种方式进行。 按需求的功能,应该设计出输入函数、输出函数、显示函数、查找函数、修改函数。另 需要一个标准界面。 B.数据存储问题 这个系统数据庞大复杂,需要需要适当应用数组,循环,结构体,文件操作等基本 语句及稍有难度的语句。因此要求我们熟练掌握结构化程序设计的基本思路和方法,在 所掌握的基本知识和技能的基础上,进一步提高自学能力和查找资料的能力,解决一定 程度的复杂的结构化程序设计问题,加深对所学知识的理解与掌握,利用自己所学知识 解决实际问题的能力,为以后的程序开发打下基础。 二:总体设计 主要结构图示 本程序由主函数和多个子函数组成,可执行多种数据管理的功能。具体通过c语言中 结构体数组来实现。主函数主体为定义的结构体,和一个switch函数,以提供多种程序 操作功能。 主要需运用到结构体数组、文件、函数等内容知识。 子函数有六个,分别负责添加、显示、删除、查询、修改、保存的功能。通过变量i使结 构体数组之间达成数据链表的功能,利用该方法主要考虑到成员中对于结构体指针尚未 熟练掌握,而这种方法更加便捷易懂。 子函数功能介绍 1. 添加:输入成员信息,依次输入编号、姓名、QQ、电话号码、单位、电子邮箱、身 份。 2. 显示:以表格形式输出所有通讯记录 3. 删除:只需输入该成员姓名,便删除其所有记录 4. 查询:可选用姓名、电话、单位身份4种方式来查询 5. 修改:输入该成员姓名后,再依次输入更新信息完成修改 6. 保存:输入文件名(带后缀)后保存。C-free中会默认以txt文件保存至c- free standard/temp文件夹中 三:详细设计 1. 主函数 完成变量的初始化与函数的定义之后,运用for( ; ; )来开启一个无限循环。循环内有switch函数来实现函数的选择功能,case1、case2等分 别执行不同的函数操作,每个函数中调用了相应的函数,并采用函数system("pause") ;暂停等待按键。在case6中采用函数exit(0)跳出循环。 下面在讲一下主函数中定义的n的作用,n的初值是1,当执行完case1中的函数input ( )后返回值为n+i,i为输入的成员数,返回值重新赋给n,n变为成员数,从而确定了之后 display()等函数循环中的终止条件。 2. 分函数 【1】添加 【2】显示 【3】删除 【4】查询 【5】修改 保存函数:【1】定义一个文件指针fp 【2】输入想创建的文件名称,如filename 【3】开辟文件,用fopen以"写"的方式打开,并把fp指针指向该文件 【4】在文件中输入信息 【5】保存(即fclose(filename)) 查询函数:运用了if来实现选择,并通过递归返回继续查询。 注:身份以及单位的查询方式有所不同,单位只能查找一条符合的记录,而按身份查询 可显示所有符合的信息。若查找不到,则返回继续查询,选择5返回则退出查询。 四:调试与测试 我们编写的函数具有一定的容错能力。具体表现为 【1】如select函数中输入0-6以外的数,则循环继续进行,直到输入0-6为止 【2】sign!='n'&&sign!='N'语句保证了大小写不会影响结果 【3】while(m!='1'&&m!='2'&&m!='3'&&m!='4') { printf("输入错误,请重新选择:"); scanf("%c",&m); }保证了输入正确 【4】当输入的成员信息错误时,可通过修改函数进行改动 五:测试结果 1.主函数运行正常。通过for语句是界面循环,并有switch及system函数进行配合调节 达到目的。(界面显示如下) 2.测试结果:运行正常,达到了预订的目标。 此处为通过保存函数保存后的txt文本中的学生信息 六:心得 课程设计是一个不断学习、思考、编写、修改的过程。它对我们的能力提出了挑战。 我不仅意识到c语言基础的重要性,更意识到了自学能力的重要性,同学学习书本,查找 资料等多种途径来构建思
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

6铭记6

打赏一下吧!^-^

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值