c语言代码大全_轻松学做C语言课程设计:学生通讯录管理系统

46ef0a6097d6b850ce6fbdaeae5d581f.gif

「今天是学习C语言第 166 天」

纸上学来终觉浅,绝知此事要躬行。——  陆游「冬夜读书示子聿」

# 题外话

C语言课程设计,对于初学者来说,主要是综合运用C语言基础知识,以实际项目的形式锻炼编程能力。从今天开始,一起轻松学做C语言课程设计常见项目,建议先运行代码,再一步步理解其实现。

PS:大家也可以直接留言提供一些课程设计选题,有可能根据大家的题目提供新的示例程序。

一般课程设计考察的知识点:结构体、链表、文件读写、简单排序和查找。

往期课程设计:

轻松学做C语言课程设计:图书管理系统-数组实现

轻松学做C语言课程设计:图书管理系统-链表实现

轻松学做C语言课程设计:学生成绩管理系统-链表实现

备注:

1.不同C编译器,对C语言程序编译有差别,建议大家选择相同的编译器。

2.代码手机不方便看,可以收藏使用电脑查看,注意各种标点符号。

3.采用Dev-C++集成开发环境,为简化初学者学习,这里尽量简单,省去一些错误处理、高级算法等代码。

# 学生通讯录管理系统

设计一个同学通讯录,实现以下功能:

- 通讯录添加、删除、修改;

- 按不同的项进行查找;

- 将通讯录写入文本文件;

- 从文本文件读入通讯录。

备注:本示例程序未实现通讯录去重功能,不检查重复添加相同姓名的情况。

# 运行效果

        *************欢迎使用学生通讯录管理系统*************        *  1:添加通讯录                      2:修改同学录  *        *  3:删除通讯录                      4:显示通讯录  *        *  5:查找通讯录                      6:保存通讯录  *        *  7:读入通讯录                      0:退出通讯录  *        **************************************************        请输出0-7,回车结束!1请您按提示依次输入通讯录信息(以空格分隔):姓名    手机号码        家庭地址        电子邮件张三    18099998888     中国北京        zhangsan@126.com信息添加成功!请输出0-7,回车结束!1请您按提示依次输入通讯录信息(以空格分隔):姓名    手机号码        家庭地址        电子邮件李四    13811112222     中国上海        lisi@163.com信息添加成功!请输出0-7,回车结束!4姓名    手机号码        家庭地址        电子邮件张三    18099998888     中国北京        zhangsan@126.com李四    13811112222     中国上海        lisi@163.com当前通讯录总共有2条信息。请输出0-7,回车结束!5请输入要查询通讯录姓名或电话号码:王五王五的通讯录未找到。请输出0-7,回车结束!6文件总共保存2条通讯信息。请输出0-7,回车结束!0是否要保存通讯录?请输入Y或N。n程序正常退出。--------------------------------Process exited after 71.37 seconds with return value 0请按任意键继续. . .

# 代码

/* ==========================================  名称   :C语言课程设计 学生通讯录管理系统   功能   :使用链表实现    环境   :Windows 10 + Dev-C++编译    作者   :一只会C的猫   公众号 :C语言大全(coderpointer)  时间   :2020.11.5 ==========================================*/#include #include #include #define HEAD_INFO  "姓名\t手机号码\t家庭地址\t电子邮件\n"// 定义通讯录信息结构体 struct contact{  // 姓名  char name[20];  // 手机  char phone[20];  // 地址  char addr[50];  // 邮箱  char mail[50];};// 定义通讯录联系人链表结点typedef struct contact_node{  struct contact contact;  struct contact_node    *next;}Contacts;/*  定义各种功能函数  备注:这里允许通讯录出现相同的项目 */// 显示菜单void showMenu();  // 添加 void addContact(Contacts *head);// 删除void deleteContact(Contacts  *head); // 查询 void queryContact(Contacts *head); // 修改void modifyContact(Contacts *head);// 显示void showContact(Contacts *head);// 保存通讯录 void saveContact(Contacts *head); // 读入通讯录 void readContact(Contacts *head); // 退出程序 void exitProgram(Contacts *head); int main() {  // 创建通讯录带头结点的空链表  Contacts *head =  (Contacts *)malloc(sizeof(Contacts));  head->next = NULL;  if(head == NULL)  {    printf("创建通讯录失败,退出。\n");    exit(-1);  }  // 显示主菜单   showMenu();      char a[10];    while (1) {    printf("\n请输出0-7,回车结束!\n");    if (fgets(a, 10, stdin) != NULL) {        switch (a[0]) {      case '0':          exitProgram(head);        break;      case '1':          addContact(head);        break;      case '2':          modifyContact(head);         break;      case '3':            deleteContact(head);        break;      case '4':          showContact(head);         break;      case '5':          queryContact(head);        break;      case '6':          saveContact(head);        break;      case '7':        readContact(head);         break;      default:        printf("请重新输入正确的功能数字0-7!\n");      }    }  }  return 0;}void showMenu() {  printf("\t*************欢迎使用学生通讯录管理系统*************\t\n");  printf("\t*  1:添加通讯录                      2:修改同学录  *\t\n");  printf("\t*  3:删除通讯录                      4:显示通讯录  *\t\n");  printf("\t*  5:查找通讯录                      6:保存通讯录  *\t\n");  printf("\t*  7:读入通讯录                      0:退出通讯录  *\t\n");  printf("\t**************************************************\t\n");}// 添加 void addContact(Contacts *head){  if(head == NULL)    return;  printf("请您按提示依次输入通讯录信息(以空格分隔):\n");  printf(HEAD_INFO);  char a[512];  Contacts *c = (Contacts *)malloc(sizeof(Contacts));  if (fgets(a, 512, stdin) != NULL &&        \      sscanf(a, "%s%s%s%s", c->contact.name, \      c->contact.phone, c->contact.addr, \      c->contact.mail) >= 4) {      c->next = NULL;      // 这里未检测相同姓名的通讯录       Contacts *t = head;      while(t->next != NULL)          t = t->next;       t->next = c;      printf("信息添加成功!\n");  }  else {    printf("输入格式有误,请重新输入!\n");  }} // 删除void deleteContact(Contacts  *head){  if(head == NULL)    return;  printf("请输入要删除通讯录姓名:");  char name[20];  scanf("%s", name);  // 换行符舍掉   getchar();  // 查找通讯录  Contacts *t = head, *p;  int flag = 0;  while(t->next != NULL)  {    if(strcmp(t->next->contact.name, name) == 0)    {      p = t->next;      t->next = t->next->next;      free(p);      flag  = 1;      break;    }    t = t->next;  }   if(flag)    printf("%s的通讯录删除成功。\n", name);  else    printf("%s的通讯录未找到。\n", name);}// 查询 void queryContact(Contacts *head){  if(head == NULL)    return;  printf("请输入要查询通讯录姓名或电话号码:");  char input[20];  scanf("%s", input);  // 换行符舍掉   getchar();  // 查找通讯录  Contacts *t = head;  while(t->next != NULL)  {    if(strcmp(t->next->contact.name, input) == 0 || \       strcmp(t->next->contact.phone, input) == 0)       break;    t = t->next;  }   if(t->next != NULL)  {    printf("%s的通讯录已找到,信息如下:\n", input);    printf(HEAD_INFO);    printf("%s\t%s\t%s\t%s\t\n", t->next->contact.name, \      t->next->contact.phone, t->next->contact.addr,  \      t->next->contact.mail);   }else    printf("%s的通讯录未找到。\n", input);}// 修改void modifyContact(Contacts *head){  if(head == NULL)    return;  printf("请输入要修改的通讯录姓名:");  char input[20];  scanf("%s", input);  // 换行符舍掉   getchar();  // 查找通讯录  Contacts *t = head;  while(t->next != NULL)  {    if(strcmp(t->next->contact.name, input) == 0)       break;    t = t->next;  }   if(t->next != NULL)  {    printf("%s的通讯录已找到,信息如下:\n", input);    printf(HEAD_INFO);    printf("%s\t%s\t%s\t%s\t\n", t->next->contact.name, \      t->next->contact.phone, t->next->contact.addr,  \      t->next->contact.mail);     printf("请依次输入修改后的手机号码、地址、电子邮件(以空格分隔):\n");    scanf("%s%s%s",t->next->contact.phone, t->next->contact.addr,\      t->next->contact.mail);    getchar();    printf("%s的通讯录修改成功。\n", input);  }else    printf("%s的通讯录未找到。\n", input);}// 显示void showContact(Contacts *head){  if(head == NULL)    return;  printf(HEAD_INFO);  int count = 0;  Contacts *t = head;  while(t->next != NULL)  {    printf("%s\t%s\t%s\t%s\t\n", t->next->contact.name, \      t->next->contact.phone, t->next->contact.addr,  \      t->next->contact.mail);     count++;    t = t->next;  }   printf("当前通讯录总共有%d条信息。\n", count);}// 保存通讯录  void saveContact(Contacts *head){  if(head == NULL)    return;  FILE *fp = fopen("contacts.txt", "a");  if(fp == NULL)  {      printf("写入contacts.txt文件失败。\n");    return;  }   Contacts *t = head;  int count = 0;  while(t->next != NULL)  {    fprintf(fp,"%s\t%s\t%s\t%s\t\n", t->next->contact.name, \      t->next->contact.phone, t->next->contact.addr,  \      t->next->contact.mail);     t = t->next;    count++;  }   printf("文件总共保存%d条通讯信息。\n", count);  fclose(fp);}// 从文件中读入通讯录 void readContact(Contacts *head){  if(head == NULL)    return;  FILE *fp = fopen("contacts.txt", "r");  if(fp == NULL)  {      printf("读入contacts.txt文件失败,文件可能不存在。\n");    return;   }   // 读入的信息添加到通讯录末尾   Contacts *t = head;  int count = 0;  while(t->next != NULL)    t = t->next;  struct contact ctmp;  while(fscanf(fp,"%s%s%s%s", ctmp.name, ctmp.phone, ctmp.addr, \                              ctmp.mail) != EOF)  {    Contacts *c = (Contacts *)malloc(sizeof(Contacts));    strcpy(c->contact.name, ctmp.name);    strcpy(c->contact.phone, ctmp.phone);    strcpy(c->contact.addr, ctmp.addr);    strcpy(c->contact.mail, ctmp.mail);    c->next = NULL;    t->next = c;    t = c;    count++;  }  printf("总共从文件读入%d条通讯信息。\n", count);  fclose(fp);}// 退出程序 void exitProgram(Contacts *head){  if(head != NULL)  {    printf("是否要保存通讯录?请输入Y或N。\n");    char c = getchar();    if(c=='Y' || c=='y')      saveContact(head);    Contacts *t = head, *p;    while(t->next != NULL)    {      head->next = t->next->next;      free(t->next);      t = head;    }    free(head);  }  printf("程序正常退出。\n");   exit(0);}

---------- End ----------

往期精彩推荐:

一万分钟C语言学习计划:2020开篇

C语言内存管理的两种方式

C89标准库功能简介

C语言链接与存储类型

C语言标准输入输出

C语言入门基本语法

更多请点击公众号历史文章...

d5afebb1023fa468716067dc9500d35f.png

「喜欢C请赏个 赞831b7236c8f042adad70c2b4e07210a8.png    点击右下角 在看」

C语言课程设计任务书(4) 一、题目:通讯录管理 二、目的与要求 1. 目的: (1)基本掌握面向过程程序设计的基本思路和方法; (2)达到熟练掌握C语言的基本知识和技能; (3)能够利用所学的基本知识和技能,解决简单的程序设计问题 2. 要求 基本要求: 1.         要求利用C语言面向过程的编程思想来完成系统的设计; 2.       突出C语言的函数特征,以多个函数实现每一个子功能; 3.         画出功能模块图; 4.         具有清晰的程序流程图和数据结构的详细定义; 5.       熟练掌握C语言对文件的各种操作。 创新要求: 在基本要求达到后,可进行创新设计,如系统用户功能控制,对管理员级和一般级别的用户系统功能操作不同 三、信息描述 有关该系统基本信息的描述,如:姓名、电话、城市和邮编等。 四、功能描述 1.       名单基本信息(姓名,城市,电话,邮编等)的录入,并存放在文件当中。 2.       基本信息的查询与修改。 3.       记录的添加和删除。 4.       对同一类型记录的查找:如查找同一城市的记录或同一省份的记录。 五、解决方案 1.       分析程序的功能要求,划分程序功能模块。 2.       画出系统流程图。 3.       代码的编写。定义数据结构和各个功能子函数。 4.       程序的功能调试。 5.       完成系统总结报告以及使用说明书 六、进度安排 此次课程设计时间为一周或两周,分四个阶段完成: 1.       分析设计阶段。指导教师应积极引导学生自主学习和钻研问题,明确设计要求,找出实现方法,按照需求分析、总体设计、详细设计这几个步骤进行。 2.       编码调试阶段:根据设计分析方案编写C代码,然后调试该代码,实现课题要求的功能。 3.       总结报告阶段:总结设计工作,写出课程设计说明书,要求学生写出需求分析、总体设计、详细设计、编码、测试的步骤和内容。 4.       考核阶段。 七、撰写课程设计报告或课程设计总结 课程设计报告要求: 总结报告包括需求分析、总体设计、详细设计、编码(详细写出编程步骤)、测试的步骤和内容、课程设计总结、参考资料等,不符合以上要求者,则本次设计以不及格记。 八、参考资料  《C语言程序设计教程》   网上相关资料(....略)
设计一个《学生通讯录管理系统》,在动态链表程序的基础上,设计要求如下 (必须使用结构体和链表等数据结构) 1建立文件 存储文件使用指定文件名或默认文件名; 可以不保存输入记录,但需要确认是否保存输入记录 如果已有文件,只能在其后追加; 新增记录可以不存入原文件中,以可以用原来的文件覆盖内存的内容; 可以将多个个文件记录合并到一个文件中; 2文件的存取和显示 可以单独存取文件; 可以随时显示内存中记录的全部内容; 可以直接存取默认文件或指定文件; 3删除记录 可以按“姓名”或“电话”方式删除记录并更新内存链表内容; 能给出被删除的信息,输出没有找到的信息; 如果已经是空表,上出时应给出信息并返回主菜单; 如果没有要删除的信息,输出没有找到的信息; 删除操作仅限于内存,只有执行记录时,才能覆盖原记录; 4查询记录 可以按“姓名”或“电话”或“宿舍”方式查询记录 能给出查询记录的信息; 如果查询的信息不存在,输出没有找到的信息; 5 整体功能 a可以随时检索、删除、或增加新记录,保存或取消新的记录 b使姓名可由16位字符和数字的混合编码组成 c使电话号码可由18位字符和数字组成 d将输出信息加上输出信息信息栏,例如 姓名 电话 性别 年龄 生日 宿舍 李四 1234 男 21 7月1日 东二333 e使用菜单实现功能的正确的选择 f 所有节点信息都是动态生成。 6测试程序 应列出测试大纲对程序进行测试; 应保证测试用例测试到程序的各种边缘情况
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值