程序思维导图

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

如有错误请指出欢迎交流



 #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. MSSQLSERVER执行计划详解

    序言 本篇主要目的有二: 1.看懂t-sql的执行计划,明白执行计划中的一些常识. 2.能够分析执行计划,找到优化sql性能的思路或方案. 如果你对sql查询优化的理解或常识不是很深入,那么推荐几骗博 ...

  2. 纪录我的iOS学习之路

    学习资料的网址 田伟宇(Casa Taloyum)有几篇介绍iOS架构的文章,一级棒!原博客链接. iOS应用架构谈 开篇 iOS应用架构谈 view层的组织和调用方案 iOS应用架构谈 网络层设计方 ...

  3. Handler系列之内存泄漏

    本篇简单的讲一下平常使用Handler时造成内存泄漏的问题. 什么是内存泄漏?大白话讲就是分配出去的内存,回收不回来.严重会导致内存不足OOM.下面来看一下造成内存泄漏的代码: public clas ...

  4. java监控之ManagementFactory分析

    The ManagementFactory class is a factory class for getting managed beans for the Java platform. This ...

  5. 匹夫细说C#:可以为null的值类型,详解可空值类型

    首先祝大家中秋佳节快乐~ 0x00 前言 众所周知的一点是C#语言是一种强调类型的语言,而C#作为Unity3D中的游戏脚本主流语言,在我们的开发工作中能够驾驭好它的这个特点便十分重要.事实上,怎么强 ...

  6. CentOS7下mysql5.6修改默认编码

    参考原文教程:Centos7下修改mysql5.6编码方式 解决网站中文显示问号 解决办法: 修改MySQL数据库字符编码为UTF-8,UTF-8包含全世界所有国家需要用到的字符,是国际编码. 具体操 ...

  7. Java进击C#——应用开发之Asp.net MVC

    本章简言 上一章笔者讲到关于Asp.NET的知识点.了解Asp.NET基本的知识点之后,我们在来学习关于C#的MVC框架就简单多了.显然本章就是来介绍一下关于Asp.NET MVC.对于MVC的思想笔 ...

  8. 深入学习jQuery特性操作

    × 目录 [1]获取特性 [2]设置特性 [3]删除特性 前面的话 每个元素都有一个或者多个特性,这些特性的用途就是给出相应元素或者其内容的附加信息.操作特性的DOM方法主要有3个:getAttrib ...

  9. 学会给你的类(及成员)来定制一套自己的Attribute吧

    在通过Visual Studio创建的C#程序集中,都包含了一个AssemblyInfo.cs的文件,在这个文件中,我们常常会看到这样的代码 [assembly: AssemblyTitle(&quo ...

  10. IL接口和类的属性

    上一篇文章学习了IL的入门,接下来我们再通过两个例子来了解下类的属性.构造函数以及接口的使用 一.类的属性.构造函数 1.先看下我们要构建的类的C#代码,然后再进行IL的实现,示例代码如下: [Ser ...