程序思维导图

代码表示(代码参考:长春大学-牛言涛老师)

如有错误请指出欢迎交流



 #include<stdio.h>
#include<malloc.h>//动态存储分配函数头文件
#include<math.h>//包含数学函数的文件
#include<string.h>//一个和字符串处理相关的头文件
#include<process.h>//包含用于和宏指令的作用声明与螺纹和过程一起使用的C标头文件
#define ERROR 0 //宏定义
#define OK 1
#define over -2
#define ListInitSize 20
#define ListIncrement 5
#define Namelen 8
#define Majorlen 20
#define INIT_N 3
typedef int Status; //自定义类型语句 Status i 等价于 int i
typedef char StatusC; typedef struct{
StatusC number[]; //学号:081330385
StatusC name[Namelen+]; //姓名:郭靖
StatusC gender; //性别:男
StatusC telephone[]; //电话:15890377853
StatusC qqNumber[]; //QQ:485284320
StatusC major[Majorlen+];//专业:计算机科学与技术 }Student;//类型为学生 typedef struct{ Student *elem; //存储空间的基址
Status length; //当前长度
Status listsize; //当前分配的存储容量(以sizeof(Studnet)为单位)
}Sqlist; //信息初始化,构造一个空的线性表
Status InitList(Sqlist &l){ l.elem=(Student *)malloc(ListInitSize*sizeof(Student));
//申请LIST_INIT_SIZE个大小为整型(Student)字节的空间,
//把空间指针给L.elem
if(!l.elem)exit(over);
//判断l中的数据成员elem是否为0,为0即执行if下面语句
l.length=;
//赋值
l.listsize=ListInitSize;
return OK;
} //插入记录
Status ListInsert(Sqlist &l,Status i,Student s){ Student *newbase;
if(i<||i>l.length+)
return ERROR;//i值不合法
if(l.length>=l.listsize)//当前存储空间已经满了,增加分配空间
{
newbase=(Student*)realloc(l.elem,(
ListInitSize+ListIncrement)*(sizeof(Student)));
/*
先释放原来L.elem所指内存区域,并按照
(LIST_INIT_SIZE+ListIncrement)*sizeof(Student)
的大小重新分配空间其中ListIncrement为20,
同时将原有数据从头到尾拷贝到新分配的内存区域,
并返回该内存区域的首地址。即重新分配存储器块。
*/
if(!newbase)exit(over);
// 判断newbase是否为0,为0即执行if下面语句
l.elem=newbase;
//赋值
l.listsize+=ListIncrement;
}
for(Status j=l.length;j>=i;j--)
l.elem[j]=l.elem[j-];
//赋值
l.elem[i-]=s;
l.length++;
return OK;
} //打印输出线性表中的信息
void print(Sqlist &l){ if(l.length==)
printf("空表,无任何记录!\n\n");
printf("学号 姓名 性别 手机号 QQ 专业\n");
printf("******************************\n"); for(Status i=;i<l.length;i++){ printf("%-10s %-8s",l.elem[i].number,l.elem[i].name);
//输出学好 姓名
if(l.elem[i].gender=='m')printf("男");
//判断语句
else printf("女");
printf("%14s %9s %10s",l.elem[i].telephone,l.elem[i].qqNumber,l.elem[i].major);
//输出电话号码 qq号码 专业
printf("\n");
}
printf("------------------------------\n");
} //打印输出线性表中指定学生的信息
void print_single(Student s){ printf("学号 姓名 性别 手机号 QQ 专业\n");
printf("******************************\n");
printf("%-10s %-8s",s.number,s.name);
//输出学好 姓名
if(s.gender=='m')printf("男");
else printf("女");
printf("%14s %9s %10s",s.telephone,s.qqNumber,s.major);
//输出电话号码 qq号码 专业
printf("\n");
printf("------------------------------\n");
} //接受键盘输入信息
void ScanIn(Sqlist &l){ StatusC a[];
Status i;
printf("\t 您选择插入一条学生记录\n");
do{
Student s;
printf("\t 请输入学号:");
scanf("%s",s.number);
printf("\t 请输入姓名(<=%d个字符):",Namelen);
scanf("%s",s.name); printf("\t 请输入电话号码:");
scanf("%s",s.telephone);
printf("\t 请输入QQ号:");
scanf("%s",s.qqNumber);
printf("\t 请输入专业:");
scanf("%s",s.major);
printf("\t 请输入性别:(m:男,f:女)");
scanf("%*c%c",&s.gender);
printf("\t 请输入你要插入的位置(1<=i<=%d):",l.length+);
scanf("%d",&i);
ListInsert(l,i,s);
printf("\t 您想继续插入记录吗?(y/n)\t");
scanf("%s",a); }while(strcmp(a,"y")==||strcmp(a,"Y")==);
//调用strcmp函数
} //删除通讯中第i条记录
Status ListDelete(Sqlist &l,int i,Student s){ Status j;
if(i<||i>l.length)return ERROR;
//判断
else{ s=l.elem[i-];
for(j=i;j<=l.length;j++)l.elem[j-]=l.elem[j];
l.length--;
return OK;
}
} //按照升序排列
void SortorderAscend(Sqlist &l){ system("cls");//清空前面的信息之输出下面信息
Student s;
for(Status i=;i<l.length-;i++)
for(Status j=;j<l.length-i-;j++){
//循环比较大小 ,排列顺序
if(strcmp(l.elem[j].number,l.elem[j+].number)>){
//strcmp() 以二进制的方式进行比较,不会考虑多字节或宽字节字符;
//用来比较字符串(区分大小写)
s=l.elem[j];
l.elem[j]=l.elem[j+];
l.elem[j+]=s;
}
}
printf("*****按照升序排序成功!******\n\n");
} //判断姓名是否相同
Status EqualName(Student s1,Student s2){ if(strcmp(s1.name,s2.name))return ERROR;
//比较两个字符串是否相同
else return OK;
} //定位某个元素
int LocateElem(Sqlist l,Student s,Status(*compare)(Student,Student)) { Status i=;
Student *p=l.elem;
while(i<=l.length&&!compare(*p++,s))i++;
if(i<=l.length)
return i;
//定位元素的位置
else
return ;
} //按照姓名查找
void searchName(Sqlist l,Status(*equal)(Student,Student)){ system("cls");//清空前面的信息之输出下面信息
Student s;
Status j;
StatusC a[];
do{
printf("\t 请输入你要查找的学生的姓名:");
scanf("%s",s.name);
j=LocateElem(l,s,equal);
if(!j)printf("没有查找到你所要查找的学生记录!\n");
else print_single(l.elem[j-]);
printf("\t 您想继续查找吗?(y/n)\t");
scanf("%s",a); }while(strcmp(a,"y")==||strcmp(a,"Y")==);
} //修改姓名
void ModifyName(Sqlist &l,Status(*equal)(Student,Student)){ system("cls");//清空前面的信息之输出下面信息
Student s;
Status j;
StatusC number_new[],name_new[Namelen+],gender_new,
telephone_new[],qqNumber_new[],major_new[Majorlen+];
StatusC a[];
do{
printf("\t 请输入你要更改的学生的姓名:");
scanf("%s",s.name);
j=LocateElem(l,s,equal);
if(!j)printf("没有查找到你所要查找的学生记录!\n");
else { print_single(l.elem[j-]);
Status isOrNo=;
printf("\n修改通讯录:1 学号,2 姓名,3 性别,4 电话,5 QQ号,6 专业, 0 取消\n") ;
while(isOrNo){ printf("--------------------------\n");
printf("请选择需要修改的属性序号:");
scanf("%d",&isOrNo);
switch(isOrNo){ case :
printf("请输入更改后的学号:");
scanf("%s",number_new);
strcpy(l.elem[j-].number,number_new);
break;
case :
printf("请输入更改后的姓名:");
scanf("%s",name_new);
strcpy(l.elem[j-].name,name_new);
break;
case :
printf("请输入更改后的性别:");
scanf("%*c%c",&l.elem[j-].gender);
break;
case :
printf("请输入更改后的电话:");
scanf("%s",telephone_new);
strcpy(l.elem[j-].telephone,telephone_new);
break;
case :
printf("请输入更改后的QQ号:");
scanf("%s",qqNumber_new);
strcpy(l.elem[j-].qqNumber,qqNumber_new);
break;
case :
printf("请输入更改后的专业:");
scanf("%s",major_new);
strcpy(l.elem[j-].major,major_new);
break; }
}
printf("\n****更改后该条记录变为****\n\n");
print_single(l.elem[j-]);
}
printf("您想继续修改吗?(y/n)\t");
scanf("%s",a);
}while(strcmp(a,"y")==||strcmp(a,"Y")==);
} //主菜单
void menu(){ system("cls");//清空前面的信息之输出下面信息
printf("\t*********************\n");
printf("\t**欢迎使用学生通讯录管理系统**\n");
printf("\t*********************\n");
printf("\t**请选择如下操作,输入序号**\n");
printf("\t 0:退出系统\n");
printf("\t 1:将初始学生记录插入线性表\n");
printf("\t 2:显示线性表中所有内容\n");
printf("\t 3:向线性表中增加一条记录\n");
printf("\t 4:从线性表中删除一条记录\n");
printf("\t 5:按照姓名修改一条记录\n");
printf("\t 6:按照姓名查找一条记录\n");
printf("\t 7:按照学号升序排列通讯录\n");
printf("\t*********************\n");
printf("\t 您想进行什么操作,请选择\n"); } //主函数
int main(){ Sqlist l;
Status i,select; //select 变量标记用户的选择
if(InitList(l)!=OK)printf("\n\t线性表初始化失败!\n");
Student s[INIT_N]={{"","马东",'m',"","" ,"机械工程"},
{"","李东",'m',"","" ,"软件工程"},
{"","马西",'f',"","" ,"通讯工程"}};
menu();
scanf("%d",&select);
while(select){
switch(select){
case : //初始化数据
system("cls");//清空前面的信息之输出下面信息
for(i=;i<INIT_N;i++){ if(ListInsert(l,i+,s[i])!=OK)
printf("\t初始化数据失败!\n"); }
if(i==INIT_N)printf("\t初始化数据成功\n\n");
print(l);
printf("\n输入0:退出,输入11:返回主菜单\t");
break;
case ://显示线性表中的记录
system("cls");//清空前面的信息之输出下面信息
print(l);
printf("\n输入0:退出,输入11:返回主菜单\t");
break;
case ://接受键盘输入,并把记录插入到线性表中
system("cls");//清空前面的信息之输出下面信息
ScanIn(l);
system("cls");//清空前面的信息之输出下面信息
print(l);
printf("\n输入0:退出,输入11:返回主菜单\t");
break;
case ://删除通讯录中某条信息
system("cls");//清空前面的信息之输出下面信息
Student *s2=l.elem;
print(l);
printf("您想删除第几条通讯录1~%d:\n",l.length);
int k;
scanf("%d",&k);
Student de_s;
system("cls");//清空前面的信息之输出下面信息
if(ListDelete(l,k,de_s)==OK){
print(l);
printf("\t%-6s 已经删除成功!\n",de_s.name);
}
printf("\n输入0:退出,输入11:返回主菜单\t");
break;
case ://按照姓名修改一条记录
ModifyName(l,EqualName);
printf("\n输入0:退出,输入11:返回主菜单\t");
break;
case ://按照姓名查找记录
searchName(l,EqualName);
printf("\n输入0:退出,输入11:返回主菜单\t");
break;
case ://按照学好升序排列
system("cls");//清空前面的信息之输出下面信息
SortorderAscend(l);
print(l);
printf("\n输入0:退出,输入11:返回主菜单\t");
break;
case ://返回主菜单
menu();
break;
}
scanf("%d",&select);
}
return ; }

 


结果显示

主菜单

将初始学生信息插入线性表中

读取线性表中信息

插入一条学生信息

删除一条学生信息

更改学生信息

查找学生信息

将学生信息排序

数据结构(c语言)之学生信息管理系统的更多相关文章

  1. C语言练习-学生信息管理系统

    题目要求: 学生信息管理系统struct studentInfo{ int id; char name[128]; int age; char sex; int c_score; int cpp_sc ...

  2. C语言版本学生信息管理系统

    仍然有一些小bug,后续会发布OC完善版的图书馆管理系统,欢迎批评指正. #include <stdio.h> void menu_choose(); typedef struct { i ...

  3. 【转载】C语言综合实验1—学生信息管理系统

    http://www.cnblogs.com/Anker/archive/2013/05/06/3063436.html 实验题目:学生信息管理系统 实验要求:用户可以选择1-7可以分别进行学生信息的 ...

  4. C语言小练习之学生信息管理系统

    C语言小练习之学生信息管理系统 main.c文件   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 2 ...

  5. 大一C语言结课设计之《学生信息管理系统》

    第一次写这么长的程序,代码仅供參考,有问题请留言. /* ** 学生信息管理系统 ** IDE:Dev-Cpp 4.9.9.2 ** 2014-6-15 */ #include <stdio.h ...

  6. 学生信息管理系统(c语言)

    ①注意: 程序中使用了sleep()函数.system()函数 关于 sleep() 函数 sleep() 函数的头文件和用法会因环境的不同而有所不同. 具体见-sleep()函数功能及用法 关于sy ...

  7. 学生信息管理系统(C语言)

    #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct student ...

  8. 基于数组或链表的学生信息管理系统(小学期C语言程序实训)

    1.基于数组的学生信息管理系统 实验内容: 编写并调试程序,实现学校各专业班级学生信息的管理.定义学生信息的结构体类型,包括:学号.姓名.专业.班级.3门成绩. 实验要求: (1) main函数:以菜 ...

  9. 【Python3.6+Django2.0+Xadmin2.0系列教程之二】学生信息管理系统(入门篇)

    上一篇我们已经创建好了一个Xadmin的基础项目,现在我们将在此基础上构建一个同样很基础的学生信息管理系统. 一.创建模型 模型是表示我们的数据库表或集合类,并且其中所述类的每个属性是表或集合的字段, ...

  10. C语言实现---学生成绩管理系统

    C语言实现了学生成绩管理系统,可以进行学生成绩的增加,删除,更新,查询,计算和展示. 完整代码如下: #include<stdio.h> #include<stdlib.h> ...

随机推荐

  1. 配置hibernate,Struts。文件

    hibernate文件配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernat ...

  2. WCF学习之旅—请求与答复模式和单向模式(十九)

    一.概述 WCF在通信过程中有三种模式:请求与答复.单向.双工通信.以下我们一一介绍. 二.请求与答复模式 客户端发送请求,然后一直等待服务端的响应(异步调用除外),期间处于假死状态,直到服务端有了答 ...

  3. 通过Zabbix API实现对主机的增加(无主机资产的添加和带主机资产的添加)、删除、获取主机id、获取模板id、获取组id

    config.yaml存储zabbix的信息(主要包括zabbix server的url .请求头部.登陆的用户名密码) Zabbix_Config: zabbix_url: http://192.1 ...

  4. 02.Web大前端时代之:HTML5+CSS3入门系列~H5结构元素

    Web大前端时代之:HTML5+CSS3入门系列:http://www.cnblogs.com/dunitian/p/5121725.html 1.结构元素 可以理解为语义话标记,比如:以前这么写&l ...

  5. Python标准模块--multiprocessing

    1 模块简介 multiprocessing模块在Python2.6中引入.最初的multiprocessing是由Jesse Noller和Richard Oudkerk在PEP 371中定义.就像 ...

  6. MVC5 网站开发之七 用户功能 1、角色的后台管理

    角色是网站中都有的一个功能,用来区分用户的类型.划分用户的权限,这次实现角色列表浏览.角色添加.角色修改和角色删除. 目录 奔跑吧,代码小哥! MVC5网站开发之一 总体概述 MVC5 网站开发之二 ...

  7. ASP.NET MVC5+EF6+EasyUI 后台管理系统(36)-文章发布系统③-kindeditor使用

    系列目录 我相信目前国内富文本编辑器中KindEditor 属于前列,详细的中文帮助文档,简单的加载方式,可以定制的轻量级.都是系统的首选 很多文章教程有kindeditor的使用,但本文比较特别可能 ...

  8. JavaScript:正则表达式 前瞻

    正向前瞻:用来捕获出现在特定字符之前的字符,只有当字符后面跟着某个特定字符才去捕获它.(?=) 负向前瞻:它用匹配只有当字符后面不跟着某个特定字符时才去匹配它.(?!) 在执行前瞻和负向前瞻之类的运算 ...

  9. 读书笔记--SQL必知必会22--高级SQL特性

    22.1 约束 约束(constraint),管理如何插入或处理数据库数据的规则. DBMS通过在数据库表上施加约束来实施引用完整性. 大多数约束是在表定义中定义的. 22.1.1 主键 主键,用来保 ...

  10. NGUI学习笔记(一)UILabel介绍

    来个前言: 作为一个U3D程序员,自然要写一写U3D相关的内容了.想来想去还是从UI开始搞起,可能这也是最直观同时也最重要的部分之一了.U3D自带的UI系统,也许略坑,也没有太多介绍的价值,那么从今天 ...