C语言程序设计链表的信息管理(C语言数据结构链表的基本操作)

本文讲述了C语言程序设计链表的信息管理以及C语言数据结构链表基本操作对应的知识点。希望对你有帮助,也别忘了收藏这个网站。

这篇文章的列表: 1,C语言!!!编程:建立学生信息链表,包括学号、姓名、成绩(添加、删除、查询、排序、平均)。 2.如何用C语言链表实现学生信息管理系统? 3.用C语言实现学生管理的链表。 c语言!!!编程:建立学生信息链表,包括学号、姓名、成绩(添加、删除、查询、排序、平均)。 代码如下:

/*用C语言链表写一个学生信息系统程序,要求输出学生的学号,姓名,性别,学号,姓名,成绩(添加,删除,查询,排序,平均)*/

#包含stdio.h

#包括iostream

#包含字符串. h

#包含stdlib.h

使用命名空间std

const int n = 5;

/*

* nodeEntry:节点数据类型

* nodeADT:节点结构

* linkADT:链表结构

*/

typedef结构学生

{

int num

如何用C语言链表实现学生信息管理系统 /*头文件*/

#包含stdio.h

#includedos.h

#includestdlib.h /*其他注释*/

#includestring.h /*字符串函数*/

#includemem.h /*内存操作函数*/

# include style . h/*字符操作函数*/

# include alloc . h/*动态地址分配函数*/

#定义LEN sizeof(学生)

Typedef struct stu /*定义用于缓存数据的结构数组*/

{ char num[6];

字符名称[5];

int score[3];

int sum

浮动平均值;

int顺序;

struct stu * next

}学生;

/*函数原型*/

学生* init();/*初始化函数*/

int menu _ select();/*菜单功能*/

学生* create();/*创建一个链表*/

作废打印(学生*头像);/*显示所有记录*/

void搜索(学生*人头);/*查找记录*/

学生*删除(学生*头);/*删除记录*/

学生*排序(学生*头);/*排序*/

学生*插入(学生*头,学生*新);/*插入记录*/

作废保存(学生*人头);/*保存文件*/

学生* load();/*读取文件*/

/*主功能界面*/

主()

{学生*头,新;

head = init();/*链表被初始化,使得head的值为NULL*/

for(;;)/*无限次循环*/

{开关(menu_select())

{

案例一:head = create();打破;

案例二:打印(头);打破;

案例三:搜索(头);打破;

情况4:head=delete(头);打破;

案例五:head=sort(头);打破;

案例6:head=insert(head,new);打破;/*new表示寄信人地址*/

案例7:救(头);打破;

情况8:head = load();打破;

案例9:出口(0);/*如果菜单返回值为9,程序结束*/

}

}

}

/*初始化函数*/

学生*init()

{

返回NULL/*返回空指针*/

}

/*菜单选择功能*/

menu_select()

{ int n;

结构日期d;/*定义时间结构*/

getdate(d);/*读取系统日期并将其放入结构D */

printf(" \ n按任意键进入菜单...");/*按任意键进入主菜单*/

getch();/*从键盘读取字符,但不要在屏幕上显示*/

clr SCR();/*清空屏幕*/

printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n ");

printf(" \ t \ tWelcome to \ n ");

printf(" \ n \ t \ t \ t使用学生管理系统1.0 \ n \ n \ t \ t井研中学计算机组WJQ \ n ");

printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *菜单* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n ");

Printf("\t\t\t1。输入学生记录\ n ");/*输入学生记录*/

Printf("\t\t\t2。显示打印记录\ n ");/*显示*/

Printf("\t\t\t3。在姓名上查找搜索记录\ n ");/*查找*/

Printf("\t\t\t4。删除一条记录\ n ");/*删除*/

Printf("\t\t\t5。排序以创建新文件\ n ");/*排序*/

Printf("\t\t\t6。将插入记录插入列表\ n ");/*插入*/

Printf("\t\t\t7。保存文件\ n ");/*保存*/

Printf("\t\t\t8。读取加载文件\ n ");/*阅读*/

Printf("\t\t\t9。Quit Quit \ n ");/*退出*/

printf(" \ n \ t \ t吴制作的WJQ。\ n ");

printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n ");

printf(" \ t \ t \ t \ t当前系统日期:% d \% d \% d \ n ",d.da _ year,d.da _ mon,d . da _ day);/*显示当前系统日期*/

做{

printf(" \ n \ t \ t \ t输入您的选择(1 ~ 9):");

scanf("%d ",n);

} while(n1 | | n9);/*如果选择不在1和9之间,请再次输入*/

返回(n);/*返回选中的项,主函数根据数字调用相应的函数*/

}

/*输入函数*/

学生*创建()

{int i,s;

学生*head=NULL,* p;/*定义函数。这个函数返回一个指向链表头的指针*/

clr SCR();

for(;;)

{ p =(STUDENT *)malloc(LEN);/*创建新模块*/

如果(!P) /*如果指针p为空*/

{ printf(" \ n输出内存溢出。内存不足。);/*输出内存溢出*/

返回(头);/*返回头指针,下同*/

}

Printf("输入编号(0:列表结尾):");

scanf("%s ",p-num);

if(p-num[0]= = ' 0 ')break;/*如果学号的第一个字符为0,则输入结束*/

Printf("输入姓名:");

scanf("%s ",p-name);

Printf("请输入3个等级请输入%d个分数\n ",3);/*提示开始输入分数*/

s = 0;/*计算每个学生的总分,初始值为0*/

for(I = 0;i3;I) /*3个课程循环3次*/

{

做{

Printf("分数%d:",I 1);

scanf("%d ",p-score[I]);

if(p-score[I]0 | | p-score[I]100)/*确保分数在0到100之间*/

Printf("数据错误,请重新输入数据错误,请重新输入。\ n ");

} while(p-score[I]0 | | p-score[I]100);

s = s p-score[I];/*累加所有科目的分数*/

}

p-sum = s;/*保存总分*/

p-average =(float)s/3;/*通过强制类型转换将S转换为float类型,然后得到平均值*/

p阶= 0;/*排序前该值为0 */

p-next = head;/*将首节点作为新输入节点的后继节点*/

head = p;/*新的输入节点是新的头节点*/

}

返回(头);

}

/*显示所有记录的功能*/

作废打印(学生*头像)

{ int I = 0;/*统计记录的数量*/

学生* p;/*移动指针*/

clr SCR();

p =头部;/*初始值是头指针*/

printf(" \ n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *学生* * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n ");

printf("-\ n ");

printf(" | Rec | Num | Name | Sc1 | Sc2 | Sc3 | Sum | Ave | Order | \ n ");

printf("-\ n ");

而(p!=空)

{

我;

printf(" | = | % 4s | %-4s | = | = | = | = | = | % 4.2f | %-5d | \ n ",

I,p-num,p-name,p-score[0],p-score[1],p-score[2],p-sum,p-mean,p-order);

p = p-next;

}

printf("-\ n ");

printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * END * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n ");

}

/*查找记录功能*/

无效搜索(学生*负责人)

{学生* p;/*移动指针*/

char s[5];/*用于存储名称的字符数组*/

clr SCR();

Printf("请输入要查找的名称。请输入搜索名称。\ n ");

scanf("%s ",s);

p =头部;/*将头指针赋给p*/

while(strcmp(p-name,s) p!= NULL) /*当记录的名称不是您要查找的名称,或者指针不为空时*/

p = p-next;/*将指针移动到下一个节点*/

如果(p!=NULL) /*如果指针不为空*/

{ printf(" \ n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *);

printf("-\ n ");

printf(" | Num | Name | SC1 | sc2 | sc3 | Sum | Ave | Order | \ n ");

printf("-\ n ");

printf(" | % 4s | % 4s | = | = | = | = | % 4.2f | %-5d | \ n ",

p-num,p-name,p-score[0],p-score[1],p-score[2],p-sum,p-average,p-order);

printf("-\ n ");

printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * END * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n ");

}

其他

printf(" \ n没有学生列表中没有第% s个学生。\ n”,s);/*显示没有学生*/

}

/*删除记录功能*/

学生*删除(学生*头)

{ int n;

学生*p1,* p2/*p1指发现要删除的节点指针,p2指其前任指针*/

char c,s[6];/*s[6]用于存储学号,C用于输入字母*/

clr SCR();

Printf("请输入学号请输入删除的编号:");

scanf("%s ",s);

p1 = p2 =水头;/*为p1和p2分配初始值*/

while(strcmp(pnum,s) p1!= NULL) /*当记录的学号不是你要找的,或者指针不为空*/

{ p2 = p1/*将p1指针值赋给p2,作为p1的前置指针*/

P1 = Pnext;/*将p1指针指向下一条记录*/

}

If(strcmp(pnum,s)==0) /*找到的学生ID */

{ printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *找到了* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n ");

printf("-\ n ");

printf(" | Num | Name | SC1 | sc2 | sc3 | Sum | Ave | Order | \ n ");

printf("-\ n ");

printf(" | % 4s | % 4s | = | = | = | = | % 4.2f | %-5d | \ n ",

pnum,pname,pscore[0],pscore[1],pscore[2],psum,paverage,Porder);

printf("-\ n ");

printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * END * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n ");

printf(" \ n是否要删除,输入y删除,输入n退出\ n确定要删除学生y/n?");/*提示是否删除,输入y删除,输入n退出*/

for(;;)

{scanf("%c ",c);

if(c = = ' N ' | | c = = ' N ')break;/*如果不删除,就会跳出这个循环*/

if(c=='y'||c=='Y ')

{

If(p1==head) /*如果p1==head,则删除的节点是第一个节点*/

head = Pnext;/*给head第二个节点地址*/

其他

p2-next = Pnext;/*否则,将下一个节点地址分配给前一个节点地址*/

n = n-1;

printf(" \ n学生ID(编号):%s个学生被删除(学生已被删除。)\n”,s);

Printf("别忘了保存。别忘了保存。\ n ");打破;/*删除然后跳出循环*/

}

}

}

其他

printf(" \ n表单上没有这样的学生\ n列表上没有编号为% s的学生。\ n”,s);/*找不到节点*/

返回(头);

}

/*排序功能*/

学生*排序(学生*头)

{ int I = 0;/*保存排名*/

学生*p1,*p2,*t,*临时;/*定义临时指针*/

temp = head-next;/*将原表头指针指向的下一个节点作为头指针*/

head-next = NULL;/*第一个节点是新表的头节点*/

while(temp!=NULL) /*当原始表不为空时排序*/

{

t =温度;/*取原表的头节点*/

temp = temp-next;/*原始头节点的指针向后移动*/

p1 =压头;/*设置移动指针p1,从头指针开始*/

p2 =头部;/*设置移动指针p2为p1的前身,初始值为头指针*/

而(t-averagepaveragep1!=NULL) /*比较平均分数*/

{

p2 = p1/*当排序点值较小时,新的表格指针将向后移动*/

P1 = Pnext;

}

If(p1==p2) /*p1==p2,表示要排序的点的值大,应该排在第一*/

{

t-next = P1;/*要排序的点的后继者是p*/

head = t;/*新的头节点是要排序的点*/

}

Else /*要排序的点要插在中间的p2和p1之间,如果P为空,就是尾部*/

{

t-next = P1;/*t后面是p1*/

p2-next = t;/*p2后面跟着t*/

}

}

p1 =压头;/*排序后的头指针赋给p1,准备填入排名*/

而(p1!=NULL) /*当p1不为空时,执行以下操作*/

{

我;/*节点序列号*/

P顺序= I;/*将节点序列号分配给等级*/

P1 = Pnext;/*指针向后移动*/

}

Printf("排序成功。\ n ");/*排序成功*/

返回(头);

}

/*插入记录功能*/

学生*插入(学生*头,学生*新)

{学生*p0,*p1,* p2

int n,sum1,I;

p1 =压头;/*点p1指向第一个节点*/

p0 =新;/*p0指向要插入的节点*/

请输入一个新记录。\ n ");/*提示输入记录信息*/

Printf("输入数字:");

scanf("%s ",new-num);

Printf("输入姓名:");

scanf("%s ",新名称);

printf("请输入%d分。\n ",3);

sum 1 = 0;/*保存新记录的总分,初始值为0*/

for(I = 0;i3;我)

{

做{

Printf("分数%d:",I 1);

scanf("%d ",new-score[I]);

if(new-score[I]100 | | new-score[I]0)

Printf("数据错误,请重新输入。\ n ");

} while(new-score[I]100 | | new-score[I]0);

sum 1 = sum 1 new-score[I];/*累加所有科目的分数*/

}

new-sum = sum1;/*将总分存储在新记录中*/

new-average =(float)sum 1/3;

new-order = 0;

If(head==NULL) /*原链表为空表*/

{ head = p0P0-next = NULL;}/*将p0指向的节点作为头节点*/

其他

{ while((P0-average Paverage)(Pnext!=NULL))

{ p2 = p1/*让p2指向p1刚刚指向的节点*/

P1 = Pnext;/*p1向后移动一个节点*/

}

if(P0-平均值= P平均值)

{ if(head = = P1)head = P0;/*在原始第一个节点之前插入*/

否则p2-next = P0;/*在p2指向的节点后插入*/

P0-next = P1;}

其他

{ Pnext = P0;P0-next = NULL;}/*在最后一个节点后插入*/

}

n = n ^ 1;/*节点数加1*/

head=sort(头);/*调用排序函数对学生的成绩重新排序*/

printf(" \ n学生% s已被更新。\ n ",新名称);

Printf("不要忘记保存不要忘记保存新文件。\ n ");

返回(头);

}

/*将数据保存到文件功能*/

作废保存(学生*人头)

{ FILE * fp/*定义指向文件的指针*/

学生* p;/*定义移动指针*/

char outfile[10];

Printf("输出文件,例如:c: \ \ score输入输出文件名,例如c:\ \ score \ n ");

scanf("%s ",outfile);

If ((FP = fopen (outfile," w))= = null)/*打开一个二进制文件进行输出,该文件是只写的*/

{

Printf("打不开文件打不开文件\ n ");

返回;/*如果打不开,返回菜单*/

}

Printf("\n保存文件...\ n ");

p =头部;/*将指针从头指针移开*/

而(p!=NULL) /*如果p不为空*/

{

fwrite(p,LEN,1,FP);/*写记录*/

p = p-next;/*指针向后移动*/

}

fclose(FP);/*关闭文件*/

Printf("保存成功...文件保存成功!\ n ");

}

/*从文件函数中读取数据*/

学生*负荷()

{学生*p1,*p2,* head = NULL/*定义记录指针变量*/

FILE * fp/*定义指向文件的指针*/

char infile[10];

Printf ("pour files如:c: \ \ score输入infile name,例如c:\ \ score \ n ");

scanf("%s ",infile);

If ((FP = fopen (infile," r))= = null)/*以只读模式打开一个二进制文件*/

{

Printf("无法打开文件。\ n ");

返回(头);

}

printf(" \ n查找文件...正在加载文件!\ n ");

P1 =(STUDENT *)malloc(LEN);/*创建新模块*/

如果(!p1)

{

Printf("内存溢出!内存不足!\ n ");

返回(头);

}

head = p1/*作为头指针应用于空格*/

而(!Feof(fp)) /*循环读取数据,直到文件结束*/

{

if(fread(p1,LEN,1,fp)!=1)断开;/*如果数据未被读取,跳出循环*/

Pnext =(STUDENT *)malloc(LEN);/*为下一个节点腾出空间*/

如果(!P下一个)

{

printf("内存不足!\ n ");

返回(头);

}

p2 = p1/*让p2指向p1刚刚指向的节点*/

P1 = Pnext;/*指针向后移动,数据链接被重新读入当前页脚*/

}

p2-next = NULL;/*最后一个节点的后继指针为空*/

fclose(FP);

printf(" \ n您成功地从文件中读取了数据!\ n您已成功从文件中读取数据!\ n ");

返回(头);

}

用C语言实现学生管理的链表 这个怎么样?我是新来的。给我点意见。

#包含stdio.h

#包含字符串. h

结构研究

{

char sname[20];

int snum

char ssex[10];

int age

}学生[100];

char name[20];

int num

char sex[10];

int age

int size = sizeof(struct stu);

int n = 0;

int选择;

void enter(struct stu student[],FILE * p);

void looking(struct stu student[],FILE * p);

void搜索(struct stu student[]);

void xiugai(struct stu student[],FILE * p);

void delete_(struct stu student[],FILE * p);

主()

{

FILE * p;

{

Printf("[1]:输入学生信息\n[2]:浏览学生信息\n[3]:查询学生信息\n[4]:修改学生信息\n[5]:删除学生信息\n[0]:退出\ n ");

printf(" select-");

scanf("%d ",choice);

getchar();

开关(选择)

{

案例1:

if((p=fopen("student.txt "," w ")= = NULL)

printf("无文件!!!");

回车(学生,p);

fclose(p);

打破;

案例二:

望(学生,p);打破;

案例三:

搜索(学生);打破;

案例4:

修改(学生,p);打破;

案例5:

delete_(学生,p);打破;

案例0:破;

}

printf(" \ n继续-[1]:是[2]:否");

printf(" \ n选择-");

scanf("%d ",choice);

开关(选择)

{

案例一:继续;

情况2:转到下一个;

}

} while(1);

接下来:

printf(" \ n感谢使用!!!");

getch();

}

void enter(struct stu student[],FILE *p)

{

fseek(p,0L,2);

printf(" name:");

获取(student[n])。sname);/*可以添加学号报错系统,即输入相同学号会报错*/

学生。sname,p);

printf(" \ n学生ID:");

scanf("%d ",学生[n]。snum);

fprintf(p," %d ",student[n]。snum);

getchar();

printf(" \ n gender:");

获取(student[n])。ssex);

学生。ssex,p);

printf(" \ nAge:");

scanf("%d ",学生[n]。年龄);

fprintf(p," %d\n ",student[n]。年龄);

n;

}

void looking(struct stu student[],FILE *p)

{

int I;

如果(n==0)

Printf("无学生信息!!!");

其他

{

Printf("[1]:从系统调用[2]:从文件调用\ n ");

printf(" select-");

scanf("%d ",choice);

开关(选择)

{

案例1:

for(I = 0;在;我)

Printf("学号:%d姓名:%s性别:%s年龄:% d \ n ",学生[i]。snum,学生[我]。sname,学生[我]。ssex,学生[i]。年龄);

打破;

案例二:

if((p=fopen("student.txt "," r ")= = NULL)

{

printf("无文件!!");

打破;

}

而(!feof(p)

{

fscanf(p," %s%d%s%d ",姓名,编号,性别,年龄);

Printf("学号:%d姓名:%s性别:%s年龄:%d\n ",编号,姓名,性别,年龄);

}

fclose(p);

打破;

}

}

}

void搜索(结构学生学生[])

{

int I;

如果(n==0)

Printf("无学生信息!!!");

其他

{

Printf("[1]:按学号[2]:按姓名\ n ");

printf(" select-");

scanf("%d ",choice);

开关(选择)

{

案例1:

Printf("输入学号:");

scanf("%d ",数字);

for(I = 0;在;我)

如果(学生[我]。snum==num)

打破;

Printf("学号:%d姓名:%s性别:%s年龄:% d ",学生[i]。snum,学生[我]。sname,学生[我]。ssex,学生[i]。年龄);

打破;

案例二:

getchar();

Printf("输入姓名:");

获取(名称);

for(I = 0;在;我)

if(strcmp(name,student[i])。sname)==0)

打破;

Printf("学号:%d姓名:%s性别:%s年龄:% d ",学生[i]。snum,学生[我]。sname,学生[我]。ssex,学生[i]。年龄);

打破;

}

}

}

void修改(struct stu student[],FILE *p)

{

int i,m,num1,agee

char m1[10];

如果(n==0)

Printf("无学生信息!!!");

其他

{

Printf("[1]:按学号[2]:按姓名\ n ");

printf(" select-");

scanf("%d ",choice);

开关(选择)

{

案例1:

Printf("输入学号:");

scanf("%d ",num 1);

for(I = 0;在;我)

如果(学生[我]。snum==num1)

打破;

打破;

案例二:

getchar();

Printf("输入姓名:");

获取(名称);

for(I = 0;在;我)

if(strcmp(name,student[i])。sname)==0)

打破;

}

Printf("[1]:改学号[2]:改性别[3]:改年龄\ n ");

printf(" Select:");

scanf("%d ",choice);

开关(选择)

{

案例1:

getchar();

Printf("输入新学号:");

scanf("%d ",数字);

学生[我]。snum = num

if((p=fopen("student.txt "," w ")= = NULL)

printf("无文件!!!");

而(!feof(p)

{

fscanf(p," %d ",m);

if(m==num1)

fprintf(p," %d ",num);

}

fclose(p);

打破;

案例二:

getchar();

Printf("输入性别:");

scanf("%s ",性);

strcpy(学生[i]。ssex,性);

if((p=fopen("student.txt "," w ")= = NULL)

printf("无文件!!!");

而(!feof(p)

{

fscanf(p," %s ",m1);

if(strcmp(student[i])。ssex,sex)==0)

fprintf(p," %s ",m1);

}

fclose(p);

打破;

案例三:

Printf("输入年龄:");

scanf("%d ",agee);

学生[我]。年龄=年龄;

if((p=fopen("student.txt "," w ")= = NULL)

printf("无文件!!!");

而(!feof(p)

{

fscanf(p," %d ",m);

如果(m==agee)

fprintf(p," %d ",agee);

}

fclose(p);

打破;

}

}

}

void delete_(struct stu student[],FILE *p)

{

结构图;

int i,j,m;

char name 1[10];

如果(n==0)

Printf("无学生信息!!!");

其他

{

Printf("[1]:按学号[2]:按姓名");

printf(" \ n select:");

scanf("%d ",choice);

开关(选择)

{

案例1:

printf(" \ n学生ID:");

scanf("%d ",数字);

for(I = 0;在;我)

if(num==student[i])。snum)

打破;

for(j = I;jn;j)

学生[I]=学生[I 1];

n-;

if((p=fopen("student.txt "," w ")= = NULL)

printf("无文件!!!");

而(!feof(p)

{

fscanf(p," %d ",m);

如果(数量==m)

{

fread(s,size,1,p);

免费;

}

}

打破;

案例二:

getchar();

printf(" \ n输入名称:");

获取(名称);

for(I = 0;在;我)

if(strcmp(name,student[i])。sname)==0)

打破;

for(j = I;jn;j)

学生[I]=学生[I 1];

n-;

if((p=fopen("student.txt "," w ")= = NULL)

printf("无文件!!!");

而(!feof(p)

{

fscanf(p," %s ",name 1);

if(strcmp(name1,name)==0)

{

fread(s,size,1,p);

免费;

}

}

打破;

}

}

}

C语言编程链表的信息管理介绍到此为止。感谢您花时间阅读本网站的内容。别忘了搜索更多关于C语言数据结构链表的基本操作和C语言程序设计链表的信息管理。

相关文章

发表新评论