题:

程序主菜单包含以下几个功能:
(1)添加记录:通过键盘输入信息,添加一条通讯录记录。
(2)删除记录:通过键盘输入学号,删除该学号的记录。
(3)输出记录:输出通讯录全部记录。
(4)按姓名查找:通过键盘输入姓名,输出该同学的所有信息。
(5)保存记录:把通讯录中所有的记录保存到文件中。
(6)清空记录:删除通讯录中的全部记录,并删除文件。
(7)退出

#include<iostream>
#include<fstream>
#include<iomanip>
#include<cstring>
using namespace std;struct Node; //存储学生信息的结构体
typedef struct Node* PtrToNode;
typedef PtrToNode List;
typedef PtrToNode Position;//存储学生信息节点
typedef struct Node
{int Student_id;//存储学生学号char Name[8]; // 存储学生姓名char Telephone[12]; //存储学生电话号码int Record;Position Next; //指向下一个节点的指针
};//添加学生信息
void AddStudent(List& L)
{Position Tmpcell;Tmpcell = (PtrToNode)malloc(sizeof(struct Node));if (Tmpcell == NULL){cout << "Out of space!" << endl;}Tmpcell->Next = NULL;char name1[8];//添加学生姓名int record1;//添加学生成绩int id1;//添加学生学号char tel[12];//添加学生电话号码//将学生信息传入到暂存节点Tmpcell,有点赘序,可删减cout << "请输入姓名:";cin >> name1;strcpy_s(Tmpcell->Name, name1);cout << "请输入分数:";cin >> record1;Tmpcell->Record = record1;cout << "请输入该生学号:";cin >> id1;Tmpcell->Student_id = id1;cout << "请输入该生电话:";cin >> tel;strcpy_s(Tmpcell->Telephone, tel);Position P;//创建工作指针P = L;//将工作指针指向头指针(头指针没有数据域,有指针域)while (P->Next != NULL) P = P->Next;//找到链表最后一个地址P->Next = Tmpcell;//将链表最后一个元素的Next指向暂存学生节点,链起来
}//删除学生信息
void DeleteStudent(List& L)
{Position Tmpcell;//设置一个暂时的存储学生节点cout << "请输入删除学生学号:";int id;cin >> id;//输入要删除的学生的学号Position P = L->Next;//将链表的位于1的指针赋值给工作指针,因为头指针L位于0,没有数据域if (P->Student_id == id)//当第一个有数据的指针的id=要删除同学的id时(下面有解释为什么要单独判断第一个){Tmpcell = P;//将要删除的同学的地址给Tmpcell,便于后面删除L->Next = P->Next;free(P);}else//当第二个及之后的学生的student_id==id时(现在已排除第一个,即位于1的同学student_id不等于id{while (P != NULL){if (P->Next->Student_id == id)//删除操作时,总是通过(P->Next)来判断是否等于要删除的学生,//(继上一句)P->Next可赋值给Tmpcell然后freeTmpcell,不影响P和链表连接,所以上面要单独判断第1个是否就是要删除的学生{Tmpcell = P->Next;P->Next = P->Next->Next;free(Tmpcell);break;}P = P->Next;}}
}//显示所有学生信息
void ShowStudent(List& L)
{cout << setw(4) << "姓名" << setw(6) << "学号" << setw(6) << "成绩" << setw(13) << "电话" << endl;Position P = L->Next;//因为L是头结点,无数据,只有地址。L->Next的地址有数据了,下面的P=L->Next同理while (P  != NULL){cout << setw(4) <<P->Name << setw(6) << P->Student_id << setw(6) << P->Record << setw(13) << P->Telephone << endl;P = P->Next;}
}//查找学生
void FindStudent(List& L)
{cout << "请输入要查找学生姓名:";char name3[8];cin >> name3;//输入学生姓名Position P = L->Next;//上面已说明,懂的都懂while (P != NULL && strcmp(P->Name,name3))//不能用“=="来判断名字是否相同,因为是char类型,只能用strcmp函数来判断是否相同P = P->Next;cout << "姓名" << P->Name << "学号" << P->Student_id << "成绩" << P->Record << "电话" << P->Telephone << endl;
}//保存学生信息到文件中
void SaveStudent(List L)
{ofstream output;//创建输入信息的方式output.open("student2.txt");Position P = L->Next; //上面已说明,ddddwhile (P!= NULL){output << P->Name << " " << P->Student_id << " " << P->Record << " " << P->Telephone << endl;P = P->Next;}output.close();
}//清空学生信息
void Clear(List& L)
{Position p, tmp;p = L->Next;//上面已说明,ddddL->Next = NULL;//释放头指针空间while (p != NULL){tmp = p->Next;free(p);p = tmp;}
}void ShowMenu()
{cout << "|----------------------------------|" << endl;cout << "           (1)添加记录                     " << endl;cout << "           (2)删除记录                     " << endl;cout << "           (3)输出记录                    " << endl;cout << "           (4)按姓名查找                    " << endl;cout << "           (5)保存记录                     " << endl;cout << "           (6)清空记录                     " << endl;cout << "           (7)退出                     " << endl;cout << "|-----------------------------------|" << endl;cout << endl;
}int main()
{ShowMenu();List L = (PtrToNode)malloc(sizeof(struct Node));L->Next = NULL;char in;//输入进行选择do{cin >> in;switch (in)//输入进行选择功能{case '1':AddStudent(L);system("cls");//清屏ShowMenu();break;case '2':DeleteStudent(L);system("cls");ShowMenu();break;case '3':ShowStudent(L);break;case '4':FindStudent(L);break;case '5':SaveStudent(L);break;case '6':Clear(L);break;case '7':break;default:cout << "输入错误,请重新输入。" << endl;}} while (in != '7');//输入7退出程序*/return 0;
}

数据结构通过链表实现班级同学通讯录相关推荐

  1. 基于javaweb的校园班级同学通讯录管理系统(java+ssm+html+jsp+mysql)

    基于javaweb的校园班级同学通讯录管理系统(java+ssm+html+jsp+mysql) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/idea/my ...

  2. 数据结构单链表实现班级考勤管理系统

    概述 运行环境 编译器:Intelij IDEA2020.3.2.x64 java环境:jdk11 基本原理,技术 首先,本程序采用的是图形界面输出,通过表格显示考勤及统计信息.为了可以长久保存考勤信 ...

  3. 基于单链表的班级通讯录

    [问题描述] 将全班同学的通讯信息存入一个单链表.元素中的通讯信息包括每一位同学的:学号.姓名.性别.宿舍.联系电话等.要求能够利用姓名和序号进行有关查找.插入.删除等操作. [基本要求] (1)将本 ...

  4. Java数据结构——用单链表编写一个简易通讯录

    Java数据结构--用单链表编写一个简易通讯录 1.定义线性表的抽象数据类型(接口) 2.定义单链表的结点Node类 3.定义数据域中的联系人Person类 4.编写顺序表(类) 5.编写测试程序(m ...

  5. 吉林大学2013级大一下学期程序设计作业:同学通讯录系统

    <程序设计基础课程设计>题目(2013级) 1.内容简介 编写一个C语言程序,实现同学通讯录管理功能.其中: 1)至少能够管理50位同学的个人信息和通讯信息,个人信息和通讯信息需要有较强的 ...

  6. 面向对象程序设计课程设计——MFC实现同学通讯录管理系统

    先上效果图; 1.设计目的 同学通讯录管理程序是为了更好地管理学生信息而开发的数据管理软件.如今,同学与同学.老师与同学联系都是通过电话联系.但是,通常这些数据与其他人的信息混合在一起,同学信息并不方 ...

  7. 20175330 数据结构-单链表(选做)

    要求 参见附件,补充MyList.java的内容,提交运行结果截图(全屏) 课下推送代码到码云 ``` public class MyList {     public static void mai ...

  8. Python数据结构之链表(linked list)

    Python数据结构之链表 一.链表的基本知识 最近在leetcode刷题时遇到了几道关于链表的题,于是恶补了一下关于链表的知识.什么是链表?熟悉python语法的同学肯定都知道list,但是这并不是 ...

  9. C++大作业--班级同学信息管理系统

    在这个学期,老师布置了C++课程程序设计报告 题目如下: 所设计的班级同学信息管理系统应具有以下功能: 1.登录功能:登录该系统时需要输入登录密码,默认的密码是666,可修改登录密码. 2.数据输入功 ...

最新文章

  1. OpenCV 中的 Scalar 类、Vec类
  2. php 管理 mysql 数据库 代码_安装并使用phpMyAdmin管理MySQL数据库_php
  3. Python全栈之路Day13
  4. OpenGL球体的Phong渲染
  5. docker快速搭建RabbitMQ集群
  6. UVA - 10003 - Cutting Sticks
  7. 看完这篇Linux基本的操作就会了
  8. 面试题:如何实现丝滑般的数据库扩容
  9. 【华为云技术分享】云小课 | 搬迁本地数据至OBS,多种方式任你选
  10. iOS下载文件,保存路径. 防止加到iCloud备份
  11. MySQL 宣布停止使用 master、slave!
  12. Navicat Premium之MySQL客户端的下载、安装和使用(博主推荐)
  13. linux根目录下各子目录的作用
  14. nmap扫描主机存活情况
  15. 个人发卡网站源码运营版 内置4套模板
  16. 星空之夜_hash+dfs
  17. vue 使用tracking.js开发人脸识别功能
  18. 通过UA判断手机的类型
  19. iOS ☞ SDWebimage 内存暴增问题
  20. java多线程设计模式详解[推荐]

热门文章

  1. 百事可乐网络营销浅析
  2. 东南大学计算机调剂上岸,这些985/211的分校上岸毫无难度??
  3. 2021年6月PMP考点
  4. vue+openlayers实现行政边界、标注交互、效果弹窗
  5. 数据分析师说他们每天都在干什么
  6. matlab影响线,基于刚性横梁法的混凝土T梁横隔板内力计算
  7. 虚拟化技术 - CPU虚拟化
  8. html颜色代码暗黑模式,html如何实现暗黑模式
  9. 产品人如何写好产品分析报告?
  10. 数据库课程设计-人事管理系统