导航:首页 > 编程语言 > c双循环链表的完整代码

c双循环链表的完整代码

发布时间:2023-10-06 20:49:20

A. 数据结构 程序设计 用双向循环链表建立一个学生管理系统,要求实现插入,删除,排序,修改等功能。

用一下我的吧
是我大一时写的
有什么问题可以追问

#include<iostream.h>
#include<string.h>

typedef struct
{
char name[10];
long num;
float score;
}student;

void creat(student stu[]);
void insert(student stu[]);
void Delete(student stu[]);
void lookup(student stu[]);
void update(student stu[]);
void stat(student stu[]);
int length(student stu[]);
void print(student stu[]);

/*********************************
创建学生信息线性表
*********************************/
void creat(student stu[])
{
cout<<"请输入学生人数:";
int n;
cin>>n;
cout<<"姓名"<<'\t'<<"学号"<<'\t'<<"成绩"<<endl;
for(int i=1;i<=n;i++)
{
char newname[10];
long newnum;
float newscore;
cin>>newname;
strcpy(stu[i].name,newname);
cin>>newnum;
stu[i].num=newnum;
cin>>newscore;
stu[i].score=newscore;
}
strcpy(stu[i].name," ");
stu[i].num=0;
stu[i].score=0;
}
/*************************************
依次输出线性表中的学生成绩信息
*************************************/

void print(student stu[])
{
cout<<"姓名"<<'\t'<<"学号"<<'\t'<<"成绩"<<'\n';
int i=1;
while(i<=length(stu))
{
cout<<stu[i].name<<'\t'<<stu[i].num<<'\t'<<stu[i].score<<'\n';
i++;
}
cout<<'\n';
}
/**********************************
根据学号查询线性表中某个学生成绩信息
**********************************/
void lookup(student stu[])
{
cout<<"请输入贺锋你要查询的学号:"芦轮;
long num;
cin>>num;
int i=1;
while(stu[i].num)
{
if(stu[i].num==num)
{
cout<<"姓名"<<'\t'<<"学号陪拍信"<<'\t'<<"成绩"<<'\n';
cout<<stu[i].name<<'\t'<<stu[i].num<<'\t'<<stu[i].score<<'\n';
break;
}
i++;
}
if(!stu[i].num)
{
cout<<"你要查询的学号不存在,请重新输入!"<<'\n';
lookup(stu);
}
cout<<'\n';
}
/********************************
在线性表的某个位置上插入学生信息
********************************/
void insert(student stu[])
{
if(length(stu)==100)
{
cout<<"存储空间已满,不能进行插入操作!"<<'\n';
}
else
{
cout<<"请输入要插入的位置:";
int m;
cin>>m;
int n=length(stu);
if(m>n+1)
{
cout<<"插入位置不正确,请重新插入!"<<'\n';
insert(stu);
}
else
{
for(int i=n+1;i>=m;i--)
{
strcpy(stu[i+1].name,stu[i].name);
stu[i+1].num=stu[i].num;
stu[i+1].score=stu[i].score;
}
cout<<"请依次输入姓名,学号,成绩"<<'\n';
char newname[10];
long newnum;
float newscore;
cin>>newname;
strcpy(stu[m].name,newname);
cin>>newnum;
stu[m].num=newnum;
cin>>newscore;
stu[m].score=newscore;
}
}
}
/*******************************************
查询线性表中有效数据的长度
*******************************************/
int length(student stu[])
{
int i=1;
while(stu[i].num)
{
i++;
}
return (i-1);
}
/*****************************************
根据学号删除线性表中对应的学生信息
*****************************************/
void Delete(student stu[])
{
cout<<"请输入你要删除的学号:";
long num;
cin>>num;
int i=1;
while(stu[i].num)
{
if(stu[i].num==num)
{
int n=length(stu);
for(int j=i;j<n;j++)
{
strcpy(stu[i].name,stu[i+1].name);
stu[i].num=stu[i+1].num;
stu[i].score=stu[i+1].score;
}
strcpy(stu[j].name," ");
stu[j].num=0;
stu[j].score=0;
break;
}
i++;
}
if(!stu[i].num)
{
cout<<"你要删除的学号不存在,请重新输入!"<<'\n';
Delete(stu);
}
}

/*****************************************
统计各成绩段的学生信息
*****************************************/
void stat(student stu[])
{
cout<<"不及格的学生是:"<<'\n';
cout<<"姓名"<<'\t'<<"学号"<<'\t'<<"成绩"<<'\n';
int i=1;
while(stu[i].num)
{
if(stu[i].score<60)
{
cout<<stu[i].name<<'\t'<<stu[i].num<<'\t'<<stu[i].score<<'\n';
}
i++;
}
cout<<'\n';

cout<<"成绩为‘良’的学生是:"<<'\n';
cout<<"姓名"<<'\t'<<"学号"<<'\t'<<"成绩"<<'\n';
i=1;
while(stu[i].num)
{
if(stu[i].score>=60 && stu[i].score<75)
{
cout<<stu[i].name<<'\t'<<stu[i].num<<'\t'<<stu[i].score<<'\n';
}
i++;
}
cout<<'\n';

cout<<"成绩为‘中’的学生是:"<<'\n';
cout<<"姓名"<<'\t'<<"学号"<<'\t'<<"成绩"<<'\n';
i=1;
while(stu[i].num)
{
if(stu[i].score>=75 && stu[i].score<90)
{
cout<<stu[i].name<<'\t'<<stu[i].num<<'\t'<<stu[i].score<<'\n';
}
i++;
}
cout<<'\n';

cout<<"成绩为‘优’的学生是:"<<'\n';
cout<<"姓名"<<'\t'<<"学号"<<'\t'<<"成绩"<<'\n';
i=1;
while(stu[i].num)
{
if(stu[i].score>=90)
{
cout<<stu[i].name<<'\t'<<stu[i].num<<'\t'<<stu[i].score<<'\n';
}
i++;
}
cout<<'\n';
}
/********************************************
修改线性表中某个位置的学生信息
********************************************/
void update(student stu[])
{
cout<<"请输入要修改的位置:";
int m;
cin>>m;
if(m>length(stu))
{
cout<<"你要修改的位置不存在,请重新输入!"<<'\n';
update(stu);
}
else
{
cout<<"请依次输入更改后的姓名,学号,成绩"<<'\n';
char newname[10];
long newnum;
float newscore;
cin>>newname;
strcpy(stu[m].name,newname);
cin>>newnum;
stu[m].num=newnum;
cin>>newscore;
stu[m].score=newscore;
}
}
/******************************************************
主函数,调用类student的成员函数以实现相应功能
******************************************************/
void main()
{
cout<<"首先建立学生管理系统!"<<'\n';
student stu[101];
creat(stu);
print(stu);
cout<<"len:"<<length(stu)<<endl;
int j=100;
cout<<"请选择您要进行的操作(1为插入,2为删除,3为查找,4为修改,5为统计,0为取消操作)";
while(j)
{
cout<<"请您选择要进行的操作:";
cin>>j;
switch(j)
{
case 1:
{
insert(stu);
print(stu);
break;
}
case 2:
{
Delete(stu);
print(stu);
break;
}
case 3:
{
lookup(stu);
break;
}
case 4:
{
update(stu);
print(stu);
break;
}
case 5:
{
stat(stu);
break;
}
default:
break;
}
}
cout<<"线性表中共有"<<length(stu)<<"个学生";
}

阅读全文

与c双循环链表的完整代码相关的资料

热点内容
java将数字转换成字母 浏览:854
c盘中的哪些是系统文件夹 浏览:668
分布式服务如何跨库统计数据 浏览:829
力控转发数据客户端模式如何建立 浏览:200
怎么样让自己的网站不被别人看到 浏览:711
编程扩展效果如何 浏览:335
荣耀畅玩手环同步qq 浏览:475
怎么向sql中添加数据库 浏览:596
录歌失败重启app什么意思 浏览:522
压缩文件包怎么在微信发送 浏览:432
mysql数据库怎么插入时间值 浏览:191
微信视频不能转发朋友圈 浏览:596
影视后期的app有哪些 浏览:956
电子保单数据出错什么意思 浏览:368
如何以文件下载音乐 浏览:438
计算机网络章节练习 浏览:999
单片机的外部中断程序 浏览:48
表格批量更名找不到指定文件 浏览:869
js的elseif 浏览:584
3dmaxvray视频教程 浏览:905

友情链接