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语言程序设计链表的信息管理。
最后更新于 2023-10-06 17:23:17 并被添加「」标签,已有 位童鞋阅读过。
本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处
相关文章