【数据结构课程大作业】通信录管理系统

该软件为本人数据结构课程设计作业,采用win32控制台程序,基于链表的增删改查,可供计算机专业在校大学生作为数据结构课程设计参考

每次使用需输入密码,初始密码为:123。可在软件主界面选择修改密码功能修改密码。

具体功能如下:

1输入信息。用来输入联系人的姓名与号码,当输入# #时表示结束。例如
htq 1234567
hq 123456789
# #

htq 1234567
hq 123456789
这两行信息将存入内存。

若输入
htq 1234567
# #

htq 1234567
这一行信息将存入内存。
若要保存到本地文件中,则可选择功能模块5保存信息
2显示信息。用来显示本地文件中已保存的信息
3查找信息。当忘记了某个联系人的号码时,可以通过此功能输入联系人的姓名来查找对应的号码

4删除信息。删除某个联系人的信息。

5保存信息。将输入内存中的联系人信息保存至本地的文件中。

6查看信息。调用windows本地的记事本程序打开保存至本地的联系人文件fp。

7修改密码。用来修改本软件初始界面中需要输入的密码。
8退出。  退出使用本软件。
具体代码如下:
# include <stdio.h>
# include<conio.h>
# include<stdlib.h>
# include<windows.h>
# include<string.h>
typedef struct Node
{
	char name[7];
	char number [11];
	struct Node * prior, * pnext;
}Node, * linklist;
void save(linklist phead)
{	
//	char fname[17];
	FILE *fp;
	linklist pnew=phead->pnext;
	if((fp=fopen("fp","a+"))==NULL)
	{
		printf("文件打开失败!\n");
	}
	else
	{
		while(pnew!=NULL)
		{
			fprintf(fp,"%s %s \t",pnew->name,pnew->number);
			pnew=pnew->pnext;
		}
		printf("\t保存成功\n");
		//MessageBox(NULL,"保存成功","提示",MB_OK);
		fclose(fp);
	}
}
void look()
{
//	system("Notepad	/*E:\\调试\\通信录管理系统\\通信录管理系统\\*/fp ");
	system("Notepad	fp ");
}
linklist  enter()
{
	char name[7];
	char number[15];
	int i=0;
	linklist phead=(linklist)malloc(sizeof(Node));
	linklist ptail=phead;
	phead->pnext=NULL;
	while(1)
	{
		
		printf("\t请输入姓名与电话号码(以#结束)\n");
		//MessageBox(NULL,"请输入姓名与电话号码(以#结束)","提示",MB_OK);
		scanf("%s %s",name,number);
		if(strcmp(name,"#")==0) 
			break;
		else
		{
			linklist pnew=(linklist)malloc(sizeof(Node));
			strcpy(pnew->name,name);
			strcpy(pnew->number,number);
			ptail->pnext=pnew;
			pnew->prior=ptail;
			pnew->pnext=NULL;
			ptail=pnew;
		}		
	}
	return phead;
}

void display(linklist phead)
{
	linklist p=phead->pnext;
	//printf("\t姓名   号码\n");
	//char a[1000];
	if(p==NULL)
	{
		printf("您目前联系人为空,赶快去添加吧!\n");
	}
//	char c[20];
//	wsprintf(c,"号码%s",p->number);
//	MessageBox(NULL,TEXT("姓名   号码"),TEXT("我的联系人"),MB_OK);
	while(p!=NULL)
	{
		//wsprintf(a,"姓名:%s 号码:%s",p->name,p->number);
		//MessageBox(NULL,a,TEXT("我的联系人"),MB_OK);

		printf("\t%s %s\n",p->name,p->number);
		p=p->pnext;

	}
}
void search(linklist phead)
{
	linklist ptemp=phead->pnext;
	char name[7];
	if(ptemp==NULL)
	{
		printf("您目前联系人为空!赶快去添加吧!\n");
		return;
	}
	printf("\t请输入要查找的人的名字\n");
//	MessageBox(NULL,"请输入要查找的人的名字","提示",MB_OK);
l:	scanf("%s",name);
	while(1)
	{
		if(ptemp==NULL)
		{
			printf("您输入的联系人不存在,请您核对后重新输入\n");
			ptemp=phead->pnext;
			goto l;
		}
		if(strcmp(ptemp->name,name)==0)
		{
			printf("号码为%s",ptemp->number);
			return;
		}	
		else
		{
			ptemp=ptemp->pnext;
		}

	}
	

}
int dellink(linklist phead)//如果定义的是双链表删除函数要分类讨论
{
	char name[7];
	linklist ptemp=phead->pnext;
	if(ptemp==NULL)
	{
		printf("您目前联系人为空,赶快去添加吧!\n");
		return 0;
	}
	printf("\t请输入要删除的人的名字\n");
	//MessageBox(NULL,"请输入要删除的人的名字","提示",MB_OK);
l:	scanf("%s",name);
	while(strcmp(ptemp->name,name)!=0)
	{
		ptemp=ptemp->pnext;
		if(ptemp==NULL)
		{
			printf("您输入的联系人不存在,请您核对后重新输入!\n");
			ptemp=phead;
			goto l;
		}
	}
	ptemp->prior->pnext=ptemp->pnext;
	//ptemp->pnext->prior=ptemp->prior;
	free(ptemp);
//	MessageBox(NULL,"删除成功!","提示",MB_OK);
	printf("删除成功!\n");
	return 1;
}
char password[4];//="123";//字符串数组只能在初始化的时候一次性赋值,其余的时候必须单个赋值
void xg()
{
	char a1[7];
	char a2[7];
	char a3[7];

	printf("请输入当前密码!\n");
	fflush(stdin);
label1:	gets(a3);
	if(strcmp(password,a3)!=0)
	{
		printf("密码不正确!请重新输入!\n");
		goto label1;
	}
	else
printf("请输入新密码!\n");
	 fflush(stdin);
label:gets(a1);
	printf("请再次输入新密码!\n");
	fflush(stdin);
	gets(a2);
	if(strcmp(a1,a2)!=0)
	{
		printf("您两次输入的密码不一致!请重新输入!\n");
		goto label;
	}
	else
	{
		FILE *fp;
		if((fp=fopen("密码.txt","r+"))!=NULL)
		{
			fputs(a1,fp);
			fclose(fp);
			printf("修改密码成功!\n");
		}
		//strcpy(password,a1);
		//printf("修改密码成功!\n");
		else
		{
			printf("文件打开失败!密码修改不成功!\n");
		}
	}

}

void main()
{
	char a[7];
	FILE *fp;
//static char	password[7]="123";
	int i,count=0;
	printf("请输入密码!\n");
	printf("================\n");
	printf("=              =\n");
	printf("================\n");
	COORD pos;
	pos.X=2;
	pos.Y=2;
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);

//LABEL:	gets(a); 
LABEL:
	{
		for(i=0;i<7;i++)
		{
			a[i]=getch();
			if(a[i]=='\x0d')
				break;
			printf("*");
			
		}
		a[i]='\0';
		printf("\n");
	}
	if((fp=fopen("密码.txt","r"))!=NULL)
	{
		fgets(password,4,fp);
		if(strcmp(a,password)!=0) 
			{
				count++;
				if(count==3)
				{
					printf("您已连续3次输错密码!请在1分钟后重新输入\n");
					//outtext("您已连续3次输错密码!请在1分钟后重新输入\n");
					Sleep(1000*60);
					goto LABEL;
				}

				printf("您输入的密码不正确!请重新输入!\n");
				//outtext("您输入的密码不正确!请重新输入!\n");
				goto LABEL;	
		} 
		else
		{
			
			printf("\n密码正确!欢迎使用!\n");
		}
	}
	else
	{
		printf("\n获取密码失败,请您稍后重新输入!\n"); 
		
			goto LABEL;
	}
	Sleep(1000);
	system("cls");
	//initgraph(1024,960);
	//loadimage(NULL,"46.jpg");
	//getch();
	//closegraph();
	//Sleep(1000);
	//system("cls");
	linklist phead=(linklist)malloc(sizeof(Node));
	phead->pnext=NULL;
	int n;
	//DWORD a;
	COORD POS;
	POS.X=7; 
	POS.Y=0;
//	SetConsoleTitle("通信录管理系统");
	//initgraph(640,480);
//	loadimage(NULL,"C:\\Users\\Administrator\\Desktop\\46.jpg");
//	rectangle(28,0,520,200);
	//closegraph();
	//Sleep(2000);
	//SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);
//	FillConsoleOutputAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_GREEN,480,POS,&a);
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),POS);
	printf("\t\t欢迎使用通信录管理系统\n");
	printf("\t■■■■■■■■■■■■■■■■■■■■■\n");
	printf("\t■"); 
	printf("\t1.输入信息   2.显示信息");printf(" \t■\n");
	printf("\t■");
	printf("\t3.查找信息   4.删除信息");printf(" \t■\n");
	printf("\t■");
	printf("\t5.保存信息   6.查看信息");printf(" \t■\n");
	printf("\t■");
	printf("\t7.修改密码   8.退出    ");printf(" \t■\n");
	printf("\t■■■■■■■■■■■■■■■■■■■■■\n");
	//Sleep(1000*27);
	//closegraph();
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|/*FOREGROUND_BLUE|*/FOREGROUND_RED|FOREGROUND_GREEN);
	while(1)
	{ 
		printf("\t请选择功能模块\n");
		scanf("%d",&n);
		switch(n)
		{
			case 1:phead=enter();break;
			case 2:display(phead);break;
			case 3:search(phead);break;
			case 4:if(dellink(phead))display(phead);/*printf("删除成功!\n");*/break;
			case 5:save(phead);break;
			case 6:look();break;
			case 7:xg();break;
			case 8:exit(1);
		}
	
	}

}	
软件运行截图如下:
软件启动界面 密码输入正确提示信息界面
  密码正确提示
程序主界面如下:

输入显示信息界面如下: 查找与删除信息界面如下:

修改密码界面如下:


具体运行过程可点击链接自行下载体验。

转载于:https://www.cnblogs.com/hainange/p/6334092.html

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值