数据结构(c语言)之学生信息管理系统
程序思维导图

代码表示(代码参考:长春大学-牛言涛老师)
如有错误请指出欢迎交流
#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语言)之学生信息管理系统的更多相关文章
- C语言练习-学生信息管理系统
题目要求: 学生信息管理系统struct studentInfo{ int id; char name[128]; int age; char sex; int c_score; int cpp_sc ...
- C语言版本学生信息管理系统
仍然有一些小bug,后续会发布OC完善版的图书馆管理系统,欢迎批评指正. #include <stdio.h> void menu_choose(); typedef struct { i ...
- 【转载】C语言综合实验1—学生信息管理系统
http://www.cnblogs.com/Anker/archive/2013/05/06/3063436.html 实验题目:学生信息管理系统 实验要求:用户可以选择1-7可以分别进行学生信息的 ...
- 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 ...
- 大一C语言结课设计之《学生信息管理系统》
第一次写这么长的程序,代码仅供參考,有问题请留言. /* ** 学生信息管理系统 ** IDE:Dev-Cpp 4.9.9.2 ** 2014-6-15 */ #include <stdio.h ...
- 学生信息管理系统(c语言)
①注意: 程序中使用了sleep()函数.system()函数 关于 sleep() 函数 sleep() 函数的头文件和用法会因环境的不同而有所不同. 具体见-sleep()函数功能及用法 关于sy ...
- 学生信息管理系统(C语言)
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct student ...
- 基于数组或链表的学生信息管理系统(小学期C语言程序实训)
1.基于数组的学生信息管理系统 实验内容: 编写并调试程序,实现学校各专业班级学生信息的管理.定义学生信息的结构体类型,包括:学号.姓名.专业.班级.3门成绩. 实验要求: (1) main函数:以菜 ...
- 【Python3.6+Django2.0+Xadmin2.0系列教程之二】学生信息管理系统(入门篇)
上一篇我们已经创建好了一个Xadmin的基础项目,现在我们将在此基础上构建一个同样很基础的学生信息管理系统. 一.创建模型 模型是表示我们的数据库表或集合类,并且其中所述类的每个属性是表或集合的字段, ...
- C语言实现---学生成绩管理系统
C语言实现了学生成绩管理系统,可以进行学生成绩的增加,删除,更新,查询,计算和展示. 完整代码如下: #include<stdio.h> #include<stdlib.h> ...
随机推荐
- Git异常:fatal: could not create work tree dir 'XXX': No such file or directory
GitHub实战系列汇总:http://www.cnblogs.com/dunitian/p/5038719.html ———————————————————————————————————————— ...
- T-SQL检查停止的复制作业代理,并启动
有时候搭建的复制在作业比较多的时候,会因为某些情况导致代理停止或出错,如果分发代理时间停止稍微过长可能导致复制延期,从而需要从新初始化复制,带来问题.因此我写了一个脚本定期检查处于停止状态的分 ...
- 如何处理CSS3属性前缀
今天闲来无聊,重新来说说CSS3前缀的问题.在春节前和@一丝姐姐说起Sass中有关于gradient的mixins.姐姐说: 为什么还要用mixin呢?为什么不使用Autoprefixer?使用Aut ...
- 【Python五篇慢慢弹(3)】函数修行知python
函数修行知python 作者:白宁超 2016年10月9日21:51:52 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给出的pythondoc ...
- 11.JAVA之GUI编程菜单
功能:添加菜单组件 知识总结: 代码如下: import java.awt.FlowLayout; import java.awt.Frame; import java.awt.Menu; impor ...
- .NET 版本区别,以及与 Windows 的关系
老是记不住各 Windows 版本中的 .NET 版本号,下面汇总一下: .NET Framework各版本汇总以及之间的关系 Mailbag: What version of the .NET Fr ...
- 第四篇 Entity Framework Plus 之 Batch Operations
用 Entity Framework 进行 增,删,改.都是基于Model进行的,且Model都是有状态追踪的.这样Entity Framework才能正常增,删,改. 有时候,要根据某个字段,批量 ...
- Error:Execution failed for task ':app:clean'.
运行时出现 Error:Execution failed for task ':app:clean'. 错误,Builld->Clean Project即可.
- java web学习总结(二十五) -------------------JSP中的九个内置对象
一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...
- Eclipse搭建Maven Prooject(终于)
今天我们一起来探讨eclipse搭建maven项目的步骤 一.建一个maven项目, 1.找到File ,点击 2.弹出窗口,再点击new 3.弹出窗口,点击other 4.输入maven,找到mav ...