導航:首頁 > 編程語言 > 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雙循環鏈表的完整代碼相關的資料

熱點內容
文件夾999找不到 瀏覽:145
win1014393最新版本號 瀏覽:100
java基本類型大小 瀏覽:516
word2007不能插入頁碼 瀏覽:968
vb讀取文件並判斷 瀏覽:6
php圖片和程序分離 瀏覽:412
安卓面試非計算機專業 瀏覽:228
u盤的光碟文件怎麼驅動 瀏覽:34
如何鎖定c盤不下文件 瀏覽:359
浙江推廣網站建設怎麼做 瀏覽:478
word文件只有10頁怎麼增加 瀏覽:921
itunes下載的系統在哪個文件夾 瀏覽:605
個性化linux全名要求 瀏覽:40
數據表格制圖小紅點如何去掉 瀏覽:244
查詢iphone版本信息失敗怎麼辦 瀏覽:978
電腦版微信下載的文件保存在哪裡 瀏覽:367
linuxsocket轉發 瀏覽:32
迷你兔數據恢復軟體可免費恢復多少 瀏覽:139
編程器怎麼燒錄兩個不同的程序 瀏覽:214
如何加密打包壓縮文件 瀏覽:328

友情鏈接