该软件为本人数据结构课程设计作业,采用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);
}
}
}
软件运行截图如下:
软件启动界面
密码输入正确提示信息界面
程序主界面如下:
输入显示信息界面如下:
查找与删除信息界面如下:
修改密码界面如下:
具体运行过程可点击链接自行下载体验。
点击链接下载