同学录管理系统

实现学生通讯录管理的几个操作功能(新建、插入、删除、从文件中读取、写入文件和查询、屏幕输出等功能)。通讯录中学生的信息有学号、姓名、出生日期、性别、电话和地址等。

[内容]1、利用链式存储结构来实现2、系统的菜单功能项如下:1----新建学生通讯录2----向学生通讯录插入学生信息3----在通讯录删除学生信息4----在文件中读取通讯录信息5----向文件中写入学生通讯录信息6----在通讯录中查询学生信息7----在屏幕中输出全部学生信息8----退出
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 100
#define len sizeof(Student)
/*定义一个学生类型的结构体 sizeof(Student)
所用的空间的大小赋值给变量len*/
static int De;
static int De2;
typedef struct Classmaterecord *Position;
typedef Position BinTree;
BinTree BT;typedef struct Classmaterecord
{int number; //学号 char name[N]; //姓名char sex[N]; //性别char phone[N]; //电话号码 BinTree Left;//左子树BinTree Right;  //右子树
}Student;
void init()//初始化
{BT==NULL;
}
void Traversal( );//显示 先序、中序、后序实现遍历void Preorder(BinTree BT);void Inorder(BinTree BT);void Postorder(BinTree BT);void Find();//查找 按学号、姓名、电话号码void FindBynum(BinTree BT,int number);void FindByname(BinTree BT,char name[]);void FindByphone(BinTree BT,char phone[]);void FindBynum(BinTree BT,int number){//按照学号进行查找if(BT!= NULL){FindBynum(BT->Left,number);if(BT->number==number){system("cls");printf("\n==============================所查同学数据===========================\n"); printf("\n--------学号-------------姓名-----------性别-----------手机号码------\n");printf("\n\t%3d\t",BT->number);printf("\t%3s\t",BT->name);printf("\t%3s\t",BT->sex);printf("\t%3s\t",BT->phone);printf("\n\n");}FindBynum(BT->Right,number);}
}
void FindByname(BinTree BT,char name[]) //按照名字查找 遍历查找
{if(BT != NULL){FindByname(BT->Left,name);if(strcmp(BT->name,name) == 0){system("cls");printf("\n===============================所查同学数据============================\n"); printf("\n--------学号-------------姓名-----------性别-----------手机号码-----\n");printf("\n\t%3d\t",BT->number);printf("\t%3s\t",BT->name);printf("\t%3s\t",BT->sex);printf("\t%3s\t",BT->phone);printf("\n\n");}FindByname(BT->Right,name);}
}
void FindByphone(BinTree BT,char phone[]){ //按照电话号码进行查找if(BT!=NULL){FindByphone(BT->Left,phone);if(strcmp(BT->phone,phone)==0){system("cls");printf("\n==============================所查同学数据==========================\n"); printf("\n--------学号-------------姓名-----------性别-----------手机号码-----\n");printf("\n\t%3d\t",BT->number);printf("\t%3s\t",BT->name);printf("\t%3s\t",BT->sex);printf("\t%3s\t",BT->phone);printf("\n\n");}FindByphone(BT->Right,phone);}
}
//显示前序遍历的结果
void Preorder(BinTree BT){if(BT!=NULL){printf("\n\t%d\t",BT->number);printf("\t%s\t",BT->name);printf("\t%s\t",BT->sex);printf("\t%s\t",BT->phone);printf("\n\n");Preorder(BT->Left);Preorder(BT->Right);}
}
//中序遍历
void Inorder(BinTree BT){if(BT!=NULL){Inorder(BT->Left);printf("\n\t%3d\t",BT->number);printf("\t%3s\t",BT->name);printf("\t%3s\t",BT->sex);printf("\t%3s\t",BT->phone);printf("\n\n");Inorder(BT->Right);}
}
//后序遍历
void Postorder(BinTree BT){if(BT!=NULL){Postorder(BT->Left);Postorder(BT->Right);printf("\n\t%3d\t",BT->number);printf("\t%3s\t",BT->name);printf("\t%3s\t",BT->sex);printf("\t%3s\t",BT->phone);printf("\n\n");}
}
void Traversal()
{printf("显示原来的预置数组里同学的信息\n");printf("----------------------------------------------------------\n");printf("(1)先序遍历预置数组里同学的信息\n");printf("(2)中序遍历预置数组里同学的信息\n");printf("(3)后序遍历预置数组里同学的信息\n");printf("(0)返回主菜单\n");printf("----------------------------------------------------------\n");printf("请输入你的选择(0-3):\n");int i;scanf("%d",&i);switch(i){case 1:    {system("cls");printf("\n--------学号-------------姓名-----------性别-----------手机号码-----\n");Preorder(BT);break;}case 2:{system("cls");printf("\n--------学号-------------姓名-----------性别-----------手机号码-----\n");Inorder(BT);break;}case 3:{system("cls");printf("\n--------学号-------------姓名-----------性别-----------手机号码-----\n");   Postorder(BT);break;}case 0:system("cls");break;}
}
void Find(){printf(" 查找同学的信息\n");printf("----------------------------------------------------------\n");printf("(1)按照学号查找同学的信息\n");printf("(2)按照姓名查找同学的信息\n");printf("(3)按照电话查找同学的信息\n");printf("(0)返回主菜单\n");printf("----------------------------------------------------------\n");printf("请输入你的选择(0-4): ");int i;scanf("%d",&i);if(i==1){int number;printf("\n请输入学号:") ;scanf("%d",&number);FindBynum(BT,number);}else if(i==2){char name[N];printf("\n请输入姓名:") ;scanf("%s",name);FindByname(BT,name);}else if(i==3){char phone[N];printf("\n请输入手机号码:") ;scanf("%s",phone);FindByphone(BT,phone);}
}
void Delete();//删除 按学号、姓名、电话号码void chazhao(BinTree BT, char name[]);void chazhao1(BinTree BT, char phone[]);BinTree DeleteBynum(BinTree BT,int number); Student *FindMin(BinTree BT)
{if(!BT){ //空的二叉树,返回NULLreturn NULL;}else{if(!BT->Left)return BT; //找到最左叶的结点并返回else{return FindMin(BT->Left); //沿着左分支继续查找}}
}void chazhao(BinTree BT, char name[])//有名字查找学号
{BinTree D;D=BT;if(D!=NULL){  chazhao(D->Left,name);chazhao(D->Right,name);if(strcmp(D->name,name)==0){De=D->number;}}}
void chazhao1(BinTree BT, char phone[]) //由电话查找学号
{BinTree D;D=BT;if(D!=NULL){  chazhao1(D->Left,phone);chazhao1(D->Right,phone);if(strcmp(D->phone ,phone)==0){De2=D->number;}}
}BinTree DeleteBynum(BinTree BT,int number){    //由学号删除 BinTree Tmp;if( !BT ) printf("要删除的元素未找到"); else {if( number<BT->number ) BT->Left = DeleteBynum( BT->Left, number );   /* 从左子树递归删除 */else if( number> BT->number  ) BT->Right = DeleteBynum( BT->Right,number ); /* 从右子树递归删除 */else {                           /* BT就是要删除的结点 *//* 如果被删除结点有左右两个子结点 */ if( BT->Left && BT->Right ) {/* 从右子树中找最小的元素填充删除结点 */Tmp = FindMin( BT->Right );BT->number=Tmp->number;strcpy(BT->name,Tmp->name);strcpy(BT->phone,Tmp->phone);strcpy(BT->sex,Tmp->sex);/* 从右子树中删除最小元素 */BT->Right = DeleteBynum( BT->Right, BT->number );}else {                         /* 被删除结点有一个或无子结点 */Tmp = BT; if( !BT->Left )        /* 只有右孩子或无子结点 */BT = BT->Right; else                    /* 只有左孩子 */BT = BT->Left;free( Tmp );}}}return BT;
}
void Delete()//删除按学号、姓名、电话号码
{printf(" 删除同学的信息\n");printf("----------------------------------------------------------\n");printf("(1)根据学号做为索引删除同学的信息\n");printf("(2)根据姓名作为索引删除同学的信息\n");printf("(3)根据电话做为索引删除同学的信息\n");printf("(0)返回主菜单\n");printf("----------------------------------------------------------\n");printf("请输入你的选择(0-3):\n");int i;scanf("%d",&i);if(i==1){int number;printf("请输入学号:");scanf("%d",&number);DeleteBynum(BT,number);}else if(i==2){char name[N];printf("请输入姓名:");scanf("%s",name);chazhao(BT,name);DeleteBynum(BT,De);}else if(i==3){char phone[N];printf("请输入手机号:"); scanf("%s",phone);chazhao1(BT,phone); DeleteBynum(BT,De2);}system("cls"); printf("\n====================================================================\n");printf("\t*****************||  删除成功! ||*****************\n");printf("====================================================================\n");
}
BinTree Add(int number,char name[],char sex[],char phone[],BinTree BT);//新增元素的添加(插入)void Modify();//修改 按学号、姓名、电话号码void ModifyBynum(BinTree BT,int number);void ModifyByname(BinTree BT,char name[]);void ModifyByphone(BinTree BT,char phone[]);void add()//添加数据
{int number;printf("\n==================================添加同学数据===============================\n"); printf("\n");printf("请输入学号:") ;scanf("%d",&number);printf("\n");printf("请输入姓名:") ;char name[N];scanf("%s",name);char sex[N];printf("\n");printf("请输入性别:") ;scanf("%s",sex);char phone[N];printf("\n");printf("请输入手机号:") ;scanf("%s",phone);BT = Add(number,name,sex,phone,BT);system("cls");
}BinTree Add(int number,char name[],char sex[],char phone[],BinTree BT)
{if(BT==NULL){        // 判断根节点是否有人,没有人则执行插入操作 BT=(Student*)malloc(len);BT->number=number;strcpy(BT->name,name);strcpy(BT->sex,sex);strcpy(BT->phone,phone);BT->Left=NULL;BT->Right=NULL;}else{       //如果根结点有人if(number<BT->number){       //如果插入的学号比根结点的学号小,则放在左孩子结点BT->Left=Add(number,name,sex,phone,BT->Left);} else if(number>BT->number){        //插入的学号比根节点的学号要大,则放在右孩子结点BT->Right=Add(number,name,sex,phone,BT->Right);}else if(number=BT->number){printf("插入结点失败,插入失败的结点是%d%s\n:",number,BT->name);}}return BT;
}//插入失败void ModifyBynum(BinTree BT,int number)//按学号修改
{ int k;if (BT != NULL){ModifyBynum(BT->Left,number);if(BT->number==number){printf("\t%d\t", BT->number);printf("%s\t", BT->name);printf("%s\t", BT->sex);printf("%s\n", BT->phone);while(1){printf("\n\n");printf(" 1: 姓名\n");printf(" 2: 性别\n");printf(" 3: 电话\n");printf(" 0:退出修改\n");scanf("%d",&k);switch(k){case 1:{char name[N];printf("请输入名字:");scanf("%s",&name);strcpy(BT->name,name);}break;case 2:{char sex[N];printf("请输入性别:");scanf("%s",&sex);strcpy(BT->sex,sex);}break;case 3:{char phone[N];printf("请输入新号码:");scanf("%s",phone);strcpy(BT->phone,phone);}break;case 4:{printf("\t学号\t姓名\t性别\t电话\n");printf("\t%d\t",BT->number);printf("%s\t",BT->name);printf("%s\t",BT->sex);printf("%s\n",BT->phone);printf("\n");}break;case 0:break;}if(k==0)break;}system("cls");}ModifyBynum(BT->Right,number);}
}void ModifyByname(BinTree BT,char name[])//按姓名修改
{ int k;if(BT != NULL){ModifyByname(BT->Left,name);if(strcmp(BT->name,name)==0){printf("\t%d\t", BT->number);printf("%s\t", BT->name);printf("%s\t", BT->sex);printf("%s\n", BT->phone);while(1){printf("\n\n");printf(" 1: 姓名\n");printf(" 2: 性别\n");printf(" 3: 电话\n");printf(" 0:退出修改\n");scanf("%d",&k);switch(k){case 1:{char name[N];printf("请输入名字:");scanf("%s",&name);strcpy(BT->name,name);}break;case 2:{char sex[N];printf("请输入性别:");scanf("%s",&sex);strcpy(BT->sex,sex);}break;case 3:{char phone[N];printf("请输入新号码:");scanf("%s",phone);strcpy(BT->phone,phone);}break;case 4:{printf("\t学号\t姓名\t性别\t电话\n");printf("\t%d\t",BT->number);printf("%s\t",BT->name);printf("%s\t",BT->sex);printf("%s\n",BT->phone);printf("\n");}break;case 0:break;}if(k==0)break;}system("cls");}ModifyByname(BT->Right,name);}
}void ModifyByphone(BinTree BT,char phone[])//按手机号修改
{ int k;if(BT != NULL){ModifyByphone(BT->Left,phone);if(strcmp(BT->phone,phone)==0){printf("\t%d\t", BT->number);printf("%s\t", BT->name);printf("%s\t", BT->sex);printf("%s\n", BT->phone);while(1){printf("\n\n");printf(" 1: 姓名\n");printf(" 2: 性别\n");printf(" 3: 电话\n");printf(" 0:退出修改\n");scanf("%d",&k);switch(k){case 1:{char name[N];printf("请输入名字:");scanf("%s",&name);strcpy(BT->name,name);}break;case 2:{char sex[N];printf("请输入性别:");scanf("%s",&sex);strcpy(BT->sex,sex);}break;case 3:{char phone[N];printf("请输入新号码:");scanf("%s",phone);strcpy(BT->phone,phone);}break;case 4:{printf("\t学号\t姓名\t性别\t电话\n");printf("\t%d\t",BT->number);printf("%s\t",BT->name);printf("%s\t",BT->sex);printf("%s\n",BT->phone);printf("\n");   }break;case 0:break;}   if(k==0)break;}system("cls");}ModifyByphone(BT->Right,phone);}
}void Modify(){         //修改 按学号、姓名、电话号码printf(" 修改同学的信息\n");printf("----------------------------------------------------------\n");printf("(1)根据学号做为索引修改同学的信息\n");printf("(2)根据姓名作为索引修改同学的信息\n");printf("(3)根据电话做为索引修改同学的信息\n");printf("(0)返回主菜单\n");printf("----------------------------------------------------------\n");printf("请输入你的选择(0-3):\n");int i;scanf("%d",&i);if(i==1){int number;printf("请输入学号:");scanf("%d",&number);ModifyBynum(BT,number);}else if(i==2){char name[N];printf("请输入姓名:");scanf("%s",name);ModifyByname(BT,name);}else if(i==3){char phone[N];printf("请输入手机号:"); scanf("%s",phone);ModifyByphone(BT,phone);}
}
//主函数
int main(){//预置数组信息BT=Add(01,"张常超","男","15537271222",BT);BT=Add(02,"刘鹏翔","男","15514902622",BT);BT=Add(03,"程龙","男","12345678901",BT);int n=-1;while(n!=0){// 系统首页 printf("\n\t\t\t *********************");printf("\n\t\t\t||   同学录管理系统  ||\n");printf("*******************************************************************\n");printf(" 1:显示原来的预置数组里同学的信息 \n\n");printf(" 2:查找同学的信息 \n\n");printf(" 3:修改同学录信息 \n\n");printf(" 4:添加新同学信息 \n\n");printf(" 5:删除同学录信息 \n\n");printf(" 0:退出该系统\n\n");printf("*******************************************************************\n");printf("选择您要进行的操作前的序号(0~5): ");scanf("%d",&n); system("cls");switch(n){case 0:{break;}case 1:{Traversal();break;}case 2:{Find();break;}case 3:{Modify();break;}case 4:{add();break;}case 5:{Delete();break;}}}
}

同学录管理系统(C语言)相关推荐

  1. 数据结构课程设计—同学录管理系统(c语言)

    数据结构课程设计-同学录管理系统(c语言) 文章目录 前言 一.需求分析 二.总体设计 三.代码实现 四.代码说明 前言 计算机相关专业在学习数据结构这门课程时会有课程设计,我被分配到的是同学录管理系 ...

  2. c语言课程设计同学录管理系统,c语言课程设计 同学录

    这是一个C语言课程设计,内容简单明了. #include #include #include #include typedef struct classmate { char num[15]; cha ...

  3. java计算机毕业设计同学录管理系统源码+系统+数据库+lw文档+mybatis+运行部署

    java计算机毕业设计同学录管理系统源码+系统+数据库+lw文档+mybatis+运行部署 java计算机毕业设计同学录管理系统源码+系统+数据库+lw文档+mybatis+运行部署 本源码技术栈: ...

  4. ssm班级毕业纪念册管理系统-javweb同学录管理系统代码-班级合照纪念信息管理系统Java项目

    ssm班级毕业纪念册管理系统-javweb同学录管理系统代码-班级合照纪念信息管理系统Java项目 注意:该项目只展示部分功能,如需了解,评论区咨询即可. 作者:IT跃迁谷 1.开发环境 开发语言:J ...

  5. c语言实验报告管理系统,C语言实验报告-学生信息资管理系统.doc

    C语言实验报告-学生信息资管理系统 C语言实验报告 院系: 数学与计算科学学院 班级: 信息与计算科学2班 姓名: 学号: 2011年12月21日 一.问题描述 编写一个信息管理系统,包括姓名.性别. ...

  6. c语言程序设计家庭收支类,家庭支出管理系统—c语言程序设计

    家庭支出管理系统-c语言程序设计 (38页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.90 积分 程序设计报告( 2015 / 2016 学年 ...

  7. c语言编程员工信息排序,员工工资管理系统(c语言编程)

    <员工工资管理系统(c语言编程)>由会员分享,可在线阅读,更多相关<员工工资管理系统(c语言编程)(6页珍藏版)>请在人人文库网上搜索. 1.include #include# ...

  8. 用c语言编写图书成绩管理系统,学生成绩管理系统(c语言编写).doc

    学生成绩管理系统(c语言编写) C程序 学生管理系统 /* Note:Your choice is C IDE */ #include "stdio.h" #include&quo ...

  9. 管理系统模板c语言,管理系统c语言

    管理系统c语言Tag内容描述: 1.精品文档 作品名称 开发者 一 系统背景 本软件能减轻对货物数目管理及价格盈亏等信息处理的工作量以便能快捷及时准确的调整货物的仓储量达到最合理化 可以使店主不失效率 ...

最新文章

  1. Qt控制中控考勤SDK
  2. C语言windows编程编写窗口
  3. ad16怎么画弧线_如何告别“千人一面”?手把手教你抠细节,画不一样人脸
  4. DataGridView DataSource 如何实现排序
  5. 在带有组合框的值列表的下拉列表中显示显示属性的子集
  6. Fastest way to duplicate mongodb collection
  7. 【Bash】实现指定目录下的文件编码转换,以原文件名保存
  8. 短视频源码:新兴行业的一匹黑马
  9. java导入jdk源码_eclipse导入JDK源码
  10. 2017全国计算机二级office题库,2017全国计算机二级office选择题题库
  11. 一道金蝶校园招聘试题数据库笔试题
  12. opencv实现银行卡号识别
  13. 没有对象怎么面向对象编程呢?真让人头秃!
  14. 蝸居…唯一有共鳴的戲劇
  15. 单目标跟踪——常用数据集和指标
  16. 相濡以沫与相忘于江湖
  17. [Maven 基础]-- Dependency Scope
  18. CTDC 2017 首席技术官领袖峰会 | 技术、探索、创新
  19. python基础03/字典
  20. 拿高分文章,还得是Synaptic Systems 微管蛋白抗体

热门文章

  1. zipfile 解压文件名乱码
  2. 【华为机试真题 Python实现】2022年4、5月高频机试题
  3. verdi直接打开list文件
  4. 支持Adobe Photoshop CC 2017最新版的Coolorus 2.5.9 色环插件
  5. iOS_TUTK_多台设备同时连线卡UI问题
  6. 【samba】Ubuntu samba的安装及使用方法
  7. WWDC 2015大会十大看点总结:Swift要开源了
  8. 2022最新1w字MySQL索引面试题(附md文档)
  9. CASIA Gait Database--Dataset B详细介绍
  10. 白酒营销策划方案,如何通过社群一年做了超过8000万的营业额?