当前位置:首页 大学排名 c语言教务管理系统链表

c语言教务管理系统链表

发布时间:2023-03-09 14:23:20

#include <stdio.h>

#include<dos.h>

c语言教务管理系统链表

#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 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 ?")

c语言教务管理系统链表

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语言链表实现学生信息管理系统全部的内容,如果了解更多相关内容,可以关注醉学网,你们的支持是我们更新的动力!

温馨提示:
本文【c语言教务管理系统链表】由作者 院校教务系统指导 转载提供。 该文观点仅代表作者本人, 自学教育网 信息发布平台,仅提供信息存储空间服务, 若存在侵权问题,请及时联系管理员或作者进行删除。
(c)2008-2025 自学教育网 All Rights Reserved 汕头市灵创科技有限公司
粤ICP备2024240640号-6