数据结构实验报告(报告+C语言源代码) 下载本文

内容发布更新时间 : 2024/12/26 4:48:04星期一 下面是文章的全部内容请认真阅读。

printf(\查找结果\\n\ printstart(); printc(); printe(p); printstart(); } else Nofind(); }

void Del(Link l) //删除 {

Node *p,*r;

char findmess[20]; if(!l->next) {

printf(\提示:没有资料可以删除!\\n\ return; }

printf(\确定进行删除操作请按 1,按其他按键退出该操作\\n\\n\\n\\n\

if(menu()==1) {

printf(\请你输入要删除的学号:\ scanf(\

p=Locate(l,findmess,\ if(p) {

r=l;

while(r->next!=p) r=r->next;

r->next=p->next; free(p);

printf(\提示:该学生已经成功删除!\\n\ shoudsave=1; } else

Nofind(); } else exit; }

void Modify(Link l) //修改函数 {

16

Node *p;

char findmess[20]; if(!l->next) {

printf(\提示:没有资料可以修改!\\n\ return; }

printf(\请你输入要修改的学生学号:\ scanf(\

p=Locate(l,findmess,\ if(p) {

printf(\请你输入新学号(原来是%s):\ scanf(\

printf(\请你输入新姓名(原来是%s):\ scanf(\ getchar();

printf(\请你输入新性别(原来是%s):\ scanf(\

printf(\请你输入新的数据结构成绩(原来是%d分):\ scanf(\ getchar();

printf(\请你输入新的数据库成绩(原来是%d分):\ scanf(\ getchar();

printf(\请你输入新的英语成绩(原来是%d分):\ scanf(\

p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade; p->data.ave=p->data.totle/3;

printf(\提示:资料修改成功!\\n\ shoudsave=1; } else

Nofind(); }

void Disp(Link l) //显示函数 {

int count=0; Node *p; p=l->next;

if(!p) {

17

printf(\提示:没有资料可以显示!\\n\ return; }

printf(\显示结果\\n\ printstart(); printc(); printf(\ while(p) {

printe(p); p=p->next; }

printstart(); printf(\ }

void Tongji(Link l) //统计函数 {

Node *pm,*pe,*pc,*pt,*pa; //用于指向分数最高的接点 Node *r=l->next; if(!r) {

printf(\提示:没有资料可以统计!\\n\ return ; }

pm=pe=pc=pt=pa=r; while(r!=NULL) {

if(r->data.cgrade>=pc->data.cgrade) pc=r;

if(r->data.mgrade>=pm->data.mgrade) pm=r;

if(r->data.egrade>=pe->data.egrade) pe=r;

if(r->data.totle>=pt->data.totle) pt=r;

if(r->data.ave>=pa->data.ave) pa=r;

r=r->next; }

printf(\统计结果--------------------------------\\n\ printf(\总分最高者:\\t%s %d分\\n\ printf(\平均分最高者:\\t%s %d分\\n\ printf(\英语最高者:\\t%s %d分\\n\

printf(\数据库最高者:\\t%s %d分\\n\

18

printf(\数据结构最高者:\\t%s %d分\\n\ printstart(); }

void Save(Link l) //保存函数 {

FILE* fp; Node *p;

int flag=1,count=0;

fp=fopen(\ if(fp==NULL) {

printf(\提示:重新打开文件时发生错误!\\n\ exit(1); }

p=l->next; while(p) {

if(fwrite(p,sizeof(Node),1,fp)==1) {

p=p->next; count++; } else {

flag=0; break; } }

if(flag) {

printf(\提示:文件保存成功.(有%d条记录已经保存.)\\n\ shoudsave=0; }

fclose(fp); }

void main() {

Link l;//连表

FILE *fp; //文件指针 char ch; char jian;

19

int count=0; Node *p,*r;

l=(Node*)malloc(sizeof(Node)); l->next=NULL; r=l;

fp=fopen(\ if(fp==NULL) {

fp=fopen(\ exit(0); }

printf(\提示:文件已经打开,正在导入记录......\\n\

while(!feof(fp)) {

p=(Node*)malloc(sizeof(Node));

if(fread(p,sizeof(Node),1,fp)) //将文件的内容放入接点中 {

p->next=NULL; r->next=p;

r=p; //将该接点挂入连中 count++; } }

fclose(fp); //关闭文件

printf(\提示:记录导入完毕,共导入%d条记录.\\n\

for(;;) {

switch(menu()) {

case 1:Add(l);break; //增加学生 case 2:Del(l);break;//删除学生 case 3:Qur(l);break;//查询学生 case 4:Modify(l);break;//修改学生 case 5:Disp(l);break;//显示学生 case 6:Tongji(l);break;//统计学生 case 7:Save(l);break;//保存学生 default: Wrong(); getchar(); break; } } }

20