c语言教务管理系统链表

 2025-02-09 23:36:02  阅读 244  评论 0

摘要:#include <stdio.h>#include<dos.h>#include<stdlib.h> #include<string.h> #include<mem.h> #include<ctype.h> #include<alloc.h> #define LEN sizeof(STUDENT) typedef struct stu {char num[6]char name[5]int score[3]int sumfloat averagei

#include <stdio.h>

#include<dos.h>

#include<stdlib.h>

c语言教务管理系统链表

#include<string.h>

#include<mem.h>

#include<ctype.h>

#include<alloc.h>

#define LEN sizeof(STUDENT)

typedef struct stu

{char num[6]

char name[5]

int score[3]

int sum

float average

int order

struct stu *next

}STUDENT

STUDENT *init()

int menu_select()

STUDENT *create()

void print(STUDENT *head)

void search(STUDENT *head)

STUDENT *delete(STUDENT *head)

STUDENT *sort(STUDENT *head)

STUDENT *insert(STUDENT *head,STUDENT *new)

void save(STUDENT *head)

STUDENT *load()

main()

{STUDENT *head,new

head=init()

for()

{switch(menu_select())

{

case 1:head=create()break

case 2:print(head)break

case 3:search(head)break

case 4:head=delete(head)break

case 5:head=sort(head)break

case 6:head=insert(head,&new)break

case 7:save(head)break

case 8:head=load()break

case 9:exit(0)

}

}

}

STUDENT *init()

{

return NULL

}

menu_select()

{int n

struct date d

getdate(&d)

printf("n按任一键进入主菜单...... npress any key to enter the menu......")

getch()

clrscr()

printf("********************************************************************************n")

printf("tt 欢迎 Welcome ton")

printf("nttt 使用学生管理系统1.0nnttttt-----------景炎中学计算机组WJQn")

printf("*************************************MENU***************************************n")

printf("ttt1. 输入学生成绩记录 Enter the recordn")

printf("ttt2. 显示 Print the recordn")

printf("ttt3. 寻找 Search record on namen")

printf("ttt4. 删除 Delete a recordn")

printf("ttt5. 排序 Sort to make new a filen")

printf("ttt6. 插入 Insert record to listn")

printf("ttt7. 保存 Save the filen")

printf("ttt8. 读取 Load the filen")

printf("ttt9. 退出 Quitn")

printf("ntt 制作吴俊遒WJQ Made by Wu Junqiu.n")

printf("********************************************************************************n")

printf("tttt当前系统日期:%d%d%dn",d.da_year,d.da_mon,d.da_day)

do{

printf("nttt输入你的选择Enter your choice(1~9):")

scanf("%d",&n)

}while(n<1||n>9)

return(n)

}

STUDENT *create()

{int i,s

STUDENT *head=NULL,*p

clrscr()

for()

{p=(STUDENT *)malloc(LEN)

if(!p)

{printf("n输出内存溢出. Out of memory.")

return (head)

}

printf("输入学号Enter the num(0:list end):")

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

if(p->num[0]=='0') break

printf("输入名字Enter the name:")

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

printf("请输入3门成绩Please enter the %d scoresn",3)

s=0

for(i=0i<3i++)

{

do{

printf("成绩score%d:",i+1)

scanf("%d",&p->score[i])

if(p->score[i]<0 || p->score[i]>100)

printf("数据错误,请重新输入 Data error,please enter again.n")

}while(p->score[i]<0 || p->score[i]>100)

s=s+p->score[i]

}

p->sum=s

p->average=(float)s/3

p->order=0

p->next=head

head=p

}

return(head)

}

void print(STUDENT *head)

{int i=0

STUDENT *p

clrscr()

p=head

printf("n************************************STUDENT************************************n")

printf("-------------------------------------------------------------------------------n")

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

printf("-------------------------------------------------------------------------------n")

while(p!=NULL)

{

i++

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

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

p=p->next

}

printf("-------------------------------------------------------------------------------n")

printf("**************************************END**************************************n")

}

void search(STUDENT *head)

{STUDENT *p

char s[5]

clrscr()

printf("请输入个姓名来查找. Please enter name for searching.n")

scanf("%s",s)

p=head

while(strcmp(p->name,s) &&p != NULL)

p=p->next

if(p!=NULL)

{printf("n*************************************FOUND************************************n")

printf("-------------------------------------------------------------------------------n")

printf("| Num | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |n")

printf("-------------------------------------------------------------------------------n")

printf("| %4s | %4s | %3d | %3d | %3d | %3d | %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")

}

else

printf("n没有该学生 There is no num %s student on the list.n",s)

}

STUDENT *delete(STUDENT *head)

{int n

STUDENT *p1,*p2

char c,s[6]

clrscr()

printf("请输入要删除的学号 Please enter the deleted num: ")

scanf("%s",s)

p1=p2=head

while(strcmp(p1->num,s) &&p1 != NULL)

{p2=p1

p1=p1->next

}

if(strcmp(p1->num,s)==0)

{printf("**************************************FOUND************************************n")

printf("-------------------------------------------------------------------------------n")

printf("| Num | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |n")

printf("-------------------------------------------------------------------------------n")

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

p1->num,p1->name,p1->score[0],p1->score[1],p1->score[2],p1->sum,p1->average,p1->order)

printf("-------------------------------------------------------------------------------n")

printf("***************************************END**************************************n")

printf("n是否要删除,输入Y删除,N则退出nAre you sure to delete the student Y/N ?")

for()

{scanf("%c",&c)

if(c=='n'||c=='N') break

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

{

if(p1==head)

head=p1->next

else

p2->next=p1->next

n=n-1

printf("n学号为(Num): %s 学生以被删除(student have been deleted.)n",s)

printf("别忘了保存. Don't forget to save.n")break

}

}

}

else

printf("n没有这个学生在表上nThere is no num %s student on the list.n",s)

return(head)

}

STUDENT *sort(STUDENT *head)

{int i=0

STUDENT *p1,*p2,*t,*temp

temp=head->next

head->next=NULL

while(temp!=NULL)

{

t=temp

temp=temp->next

p1=head

p2=head

while(t->average<p1->average&&p1!=NULL)

{

p2=p1

p1=p1->next

}

if(p1==p2)

{

t->next=p1

head=t

}

else

{

t->next=p1

p2->next=t

}

}

p1=head

while(p1!=NULL)

{

i++

p1->order=i

p1=p1->next

}

printf("排序成功 Sorting is sucessful.n")

return (head)

}

STUDENT *insert(STUDENT *head,STUDENT *new)

{STUDENT *p0,*p1,*p2

int n,sum1,i

p1=head

p0=new

printf("nPlease enter a new record.n")

printf("输入学号Enter the num:")

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

printf("输入名字Enter the name:")

scanf("%s",new->name)

printf("Please enter the %d scores.n",3)

sum1=0

for(i=0i<3i++)

{

do{

printf("成绩score%d:",i+1)

scanf("%d",&new->score[i])

if(new->score[i]>100||new->score[i]<0)

printf("数据错误Data error,please enter again.n")

}while(new->score[i]>100||new->score[i]<0)

sum1=sum1+new->score[i]

}

new->sum=sum1

new->average=(float)sum1/3

new->order=0

if(head==NULL)

{head=p0p0->next=NULL}

else

{while((p0->average<p1->average)&&(p1->next!=NULL))

{p2=p1

p1=p1->next

}

if(p0->average>=p1->average)

{if(head==p1)head=p0

else p2->next=p0

p0->next=p1}

else

{p1->next=p0p0->next=NULL}

}

n=n+1

head=sort(head)

printf("n学生Student %s 已被更新have been inserted.n",new->name)

printf("不要忘了保存Don't forget to save the new file.n")

return(head)

}

void save(STUDENT *head)

{FILE *fp

STUDENT *p

char outfile[10]

printf("输出文件例如:c:score Enter outfile name,for example c:scoren")

scanf("%s",outfile)

if((fp=fopen(outfile,"w"))==NULL)

{

printf("打不开文件Cannot open the filen")

return

}

printf("n保存中...Saving the file......n")

p=head

while(p!=NULL)

{

fwrite(p,LEN,1,fp)

p=p->next

}

fclose(fp)

printf("保存成功....Save the file successfully!n")

}

STUDENT *load()

{STUDENT *p1,*p2,*head=NULL

FILE *fp

char infile[10]

printf("倒入文件例如:c:score Enter infile name,for example c:scoren")

scanf("%s",infile)

if((fp=fopen(infile,"r"))==NULL)

{

printf("打不开文件Can not open the file.n")

return(head)

}

printf("n寻找文件...Loading the file!n")

p1=(STUDENT *)malloc(LEN)

if(!p1)

{

printf("内存溢出!Out of memory!n")

return(head)

}

head=p1

while(!feof(fp))

{

if(fread(p1,LEN,1,fp)!=1) break

p1->next=(STUDENT *)malloc(LEN)

if(!p1->next)

{

printf("Out of memory!n")

return (head)

}

p2=p1

p1=p1->next

}

p2->next=NULL

fclose(fp)

printf("n你成功的从文件中读取了数据!nYou have success to read data from the file!n")

return (head)

}

C语言,成绩管理系统,链表和文件的问题

p3=head->next

while(p3->num!=p1->num) //这里应该是判断是否到结尾 while(p3!=NULL)

{

if(p1->num==p3->num)

{

hh=1

break

}else hh=0

p3=p3->next

}

假设学生数未知,但不超过10000。

如果用普通数组,那么你不得不在程序一开始就声明一个长度为10000的数组,就算最终录入的学生只有5个人,但是还是会占用10000个单位的空间。

而用链表,程序一开始甚至一个空间都不需要,当要输入一个学生时,才现声明一个单位空间。如果最终只录入了7人,那么就只占了7个单位空间。

动态内存所说的节约空间,只是相对于固定分配的普通数组而言。

而你说的文件与内存的问题,跟链表无直接关系。不管你用什么数据结构,当数据太多,超过内存容量的时候,肯定都是不能同时全部读入内存的,都必须把当前不需要的部分暂存在硬盘上,等内存把当前数据处理完,写回文件,再把其他部分读入内存操作。

任何数据,都可以有两种存在状态:内存中和硬盘上。所以一个结构体可以全部存在于内存中,也可以在硬盘上。只要内存容量足够,无论多少结构体都可以存在于内存中。而在C语言里,大多数情况下,“结构体”都是在内存中的,因为当“结构体”写回硬盘后,一般都不在称之为“结构体”,而是一堆数据。

C语言的所有数据结构都是指活跃在内存中的数据的结构,因为某个特定结构的数据都是可以直接操作的,这只有放在内存中才能实现。

排序的问题,一般来讲,确实是所有学生都要读入内存才能进行排序。

记住一点,任何数据的操作都是在内存中进行的。

以上就是关于如何用C语言链表实现学生信息管理系统全部的内容,如果了解更多相关内容,可以关注,你们的支持是我们更新的动力!

版权声明:我们致力于保护作者版权,注重分享,被刊用文章【c语言教务管理系统链表】因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!;

原文链接:https://www.yxiso.com/zhishi/1356701.html

发表评论:

关于我们
院校搜的目标不仅是为用户提供数据和信息,更是成为每一位学子梦想实现的桥梁。我们相信,通过准确的信息与专业的指导,每一位学子都能找到属于自己的教育之路,迈向成功的未来。助力每一个梦想,实现更美好的未来!
联系方式
电话:
地址:广东省中山市
Email:beimuxi@protonmail.com

Copyright © 2022 院校搜 Inc. 保留所有权利。 Powered by BEIMUCMS 3.0.3

页面耗时0.1467秒, 内存占用2.01 MB, 访问数据库26次

陕ICP备14005772号-15