C语言课程设计
截止到目前为止,历时17天的课程设计已经结束了,为了给自己的辛苦留下一些纪念,同时也想给需要的朋友一些帮助,因此我把自己课程设计的一些程序发出来,希望有大佬多加指点。
一, 通讯录
设计一个通讯录管理系统,每条记录包括:联系人姓名、性别、电话、住址、Email等。系统功能要求:1、显示通讯录所有内容。按联系人姓名首字母排序,并统计共有多少条记录。2、查询通讯录。可按联系人姓名或电话号码查询,将查询结果整条记录输出到屏幕。3、修改通讯录。通过查询功能,找到需要修改的记录,并修改内容。在修改记录前显示是否要删除的提示。4、添加记录。需要判断新添加的记录是否存在,若存在终止该操作。5、删除指定记录。通过查询功能,找到要删除的记录。在删除记录前显示是否要删除的提示。6、退出通讯录管理系统。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
# define LEN sizeof(struct message)
struct message
{
char name[20];
char sex[10];
char tel[15];
char adress[30];
char email[20];
struct message *next;
}message[100];
void face()//功能选择面板
{
printf("欢迎使用通讯录系统!\n将为您提供以下服务(若无记录,建议先填加记录):\n");
printf("1.显示通讯录所有内容;\n");
printf("2.查询通讯录;\n");
printf("3.修改通讯录;\n");
printf("4.添加通讯录;\n");
printf("5.删除指定记录;\n");
printf("0.退出系统;\n");
}
void disply(struct message *head)
{
struct message *p;
int i = 0, j = 0;
struct message n;
p = head;
system("CLS");//调用DOS命令CLS能够清屏
printf("==================== → 用户信息记录表 ← ===================\n");
if (head != NULL)
{
for (i = 0; i < 99; i++)
{
for (j = i + 1; j < 100; j++)
{
if (strcmp(message[i].name, message[j].name) > 0)
{
n = message[j];
message[i] = message[j];
message[j] = n;
}
}
}
do
{
printf("联系人姓名:%s\n", p->name);
printf("联系人性别:%s\n", p->sex);
printf("联系人电话号码:%s\n", p->tel);
printf("学生地址:%s\n", p->adress);
printf("联系人email:%s\n", p->email);
p = p->next;
i++;
} while (p != NULL);
}
else
{
printf("对不起!没有任何联系人记录!!\n\n");
}
printf("一共有%d个联系人!\n", i);
}
void search(struct message *head)//电子通讯录的查找,关键字为用户姓名或电话号码;
{
struct message *p1, *p2;
char name[20];
char tel[15];
p1 = head;
p2 = p1;
system("CLS");
printf("================ → 用户信息记录查询功能 ← ==================\n");
if (name[0] >= 'a'&&name[0] <= 'z')
{
printf("输入要查找联系人的姓名:");
gets(name);
while (p1 != NULL)
{
if (strcmp(p1->name, name) == 0)
{
printf("联系人姓名:\t");
puts(p1->name);
printf("联系人性别:\t");
puts(p1->sex);
printf("联系人电话号码:\t");
puts(p1->tel);
printf("联系人地址:\t");
puts(p1->adress);
printf("联系人email:\t");
puts(p1->email);
break;
}
p2 = p1;
p1 = p1->next;
}
}
else
{
printf("输入要查找联系人的电话号码:");
gets(tel);
while (p1 != NULL)
{
if (strcmp(p1->tel, tel) == 0)
{
printf("联系人姓名:\t");
puts(p1->name);
printf("联系人性别:\t");
puts(p1->sex);
printf("联系人电话号码:\t");
puts(p1->tel);
printf("联系人地址:\t");
puts(p1->adress);
printf("联系人email:\t");
puts(p1->email);
break;
}
p2 = p1;
p1 = p1->next;
}
}
if (p1 == NULL)
printf("对不起!!没有该联系人的纪录!!\n");
}
struct message *append(struct message *head)//增添电子通讯录中的内容,即创建连表过程
{
struct message *p0 = NULL, *p1, *p2;//p0为要插入的新节点
p1 = head;
p2 = head;
int i = 0, j = 0, k = 0;
char name[20];
system("CLS");
printf("\t你能在此目录下创建并添加联系人信息\n");
printf("输入您要添加联系人的姓名:\n");
gets(name);
while (strcmp(message[i].name, name) != 0 && i < 100)i++;
if (i == 100)
{
p0 = (struct message *)malloc(LEN);
printf("请输入联系人性别:\n");
gets(p0->sex);
printf("请输入联系人电话号码:\n");
gets(p0->tel);
printf("请输入联系人地址:\n");
gets(p0->adress);
printf("请输入联系人email:\n");
gets(p0->email);
if (head == NULL)
{
head = p0;
p0->next = NULL;
}
else
{
while ((strcmp(p0->name, p1->name) > 0) && (p1->next != NULL))
{
p2 = p1;
p1 = p1->next;
}
if ((strcmp(p0->name, p1->name)) <= 0)
{
if (head == p1)
head = p0;
else
p2->next = p0;
p0->next = p1;
}
else
{
p1->next = p0;
p0->next = NULL;
}
}
}
printf("成功添加了联系人信息!\n");
return(head);
}
struct message *del(struct message *head)//电子通讯录的删除,通过输入联系人姓名删除联系人数据
{
struct message *p1, *p2;
char name[12];
system("CLS");
printf("================= → 用户信息记录删除功能 ← ===============\n");
printf("输入要删除的联系人姓名:");
gets(name);
p1 = head;
if (head == NULL)
{
printf("很抱歉!!没有任何联系人纪录!!\n");
return(head);
}
while (p1 != NULL)
{
if (strcmp(p1->name, name) == 0)
{
printf("\t是否确定删除?'y' or 'n'\n");
while (getchar() == 'y')
{
if (p1 == head)
head = p1->next;
else p2->next = p1->next;
free(p1);
printf("删除记录成功!!\n");
return(head);
}
}
p2 = p1;
p1 = p1->next;
}
printf("对不起!没有要删除的联系人纪录!\n");
return(head);
}
void revise() //修改通讯录
{
int i = 0;
char name[20];
printf("请输入所要修改通讯人的名字:\n");
scanf("%s", name);
while (strcmp(message[i].name, name) != 0 && i < 100)i++;
if (i == 100)
{
printf("通讯录查无此人!\n");
return;
}
else
{
printf("\t是否确定修改?'y' or 'n'\n");
while (getchar() == 'y')
{
printf("请输入联系人姓名:\n");
scanf("\t%s", message[i].name);
printf("请输入联系人性别:\n");
scanf("\t%s", message[i].sex);
printf("请输入联系人电话号码:\n");
scanf("\t%s", message[i].tel);
printf("请输入联系人地址:\n");
scanf("\t%s", message[i].adress);
printf("请输入联系人email:\n");
scanf("\t%s", message[i].email);
}
}
printf("修改成功!\n");
}
int main()
{
FILE *fp1, *fp2;
int a; //功能选择需要的号码
system("cls");
system("color 5f");
system("cls");
struct message *head = NULL;
if ((fp1 = fopen("record.txt", "r")) == NULL)
{
fp2 = fopen("record.txt", "w"); //如果不存在record.txt就创建一个
fclose(fp2);
}
Loop:face();
printf("选择你需要操作的功能号码:\n");
scanf("%d", &a);
getchar();
switch (a)
{
case 0:exit(0); break;
case 1:disply(head); break;
case 2:search(head); break;
case 3:revise(); break;
case 4:head = append(head); break;
case 5:head = del(head); break;
default:printf("Enter error!!\n");
}
printf("请按ENTER返回功能操作菜单\n");
getchar();
goto Loop;
system("pause");
}
不足之处还请大家指教,毕竟才学一学期c语言,还有许多的不会的地方!