2019C语言课程设计

                                                           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语言,还有许多的不会的地方!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值