⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 复件 蛇型距阵第4章.txt

📁 简单 简单 简单 简单 简单 简单 简单 简单 简单 简单 简单 简单 简单 简单 简单 简单 简单 简单 简单 简单
💻 TXT
📖 第 1 页 / 共 2 页
字号:
#include "stdio.h" 
#include "stdlib.h" 
#include "string.h" 
#include "conio.h" 
#include "mem.h" 
#include "ctype.h" 
#include "alloc.h" 
#define N 3 
typedef struct z1 
{ 
char no[11]; 
char name[15]; 
int score[N]; 
float sum; 
float average; 
int order; 
struct z1 *next; 
}STUDENT; 

STUDENT *init(); 
STUDENT *create(); 
STUDENT *delete(STUDENT *h); 
void print(STUDENT *h); 
void search(STUDENT *h); 
void save(STUDENT *h); 
STUDENT *load(); 
void computer(STUDENT *h); 
STUDENT *insert(STUDENT *h); 
void append(); 
void copy(); 
STUDENT *sort(STUDENT *h); 
STUDENT *index(STUDENT *h); 
void total(STUDENT *h); 
int menu_select(); 

main() 
{ 
int i; 
STUDENT *head; 
head=init(); 
clrscr(); 
for(;;) 
{ 
switch(menu_select()) 
{ case 0:head=init();break; 
case 1:head=create();break; 
case 2:head=delete(head);break; 
case 3:print(head);break; 
case 4:search(head);break; 
case 5:save(head);break; 
case 6:head=load(); break; 
case 7:computer(head);break; 
case 8:head=insert(head); break; 
case 9:copy();break; 
case 10:head=sort(head);break; 
case 11:append();break; 
case 12:head=index(head);break; 
case 13:total(head);break; 
case 14:exit(0); 
} 
} 
} 

menu_select() 
{ 
char *menu[]={"***************MENU***************", 
" 0. init list", 
" 1. Enter list", 
" 2. Delete a record from list", 
" 3. print list ", 
" 4. Search record on name", 
" 5. Save the file", 
" 6. Load the file", 
" 7. compute the score", 
" 8. insert record to list ", 
" 9. copy the file to new file", 
" 10. sort to make new file", 
" 11. append record to file", 
" 12. index on nomber", 
" 13. total on nomber", 
" 14. Quit"}; 
char s[3]; 
int c,i; 
gotoxy(1,25); 
printf("press any key enter menu......\n"); 
getch(); /*输入任一键*/ 
clrscr(); /*清屏幕*/ 
gotoxy(1,1); /*移动光标*/ 
textcolor(YELLOW); /*设置文本显示颜色为黄色*/ 
textbackground(BLUE); /*设置背景颜色为蓝色*/ 
gotoxy(10,2); /*移动光标*/ 
putch(0xc9); /*输出左上角边框┏*/ 
for(i=1;i<44;i++) 
putch(0xcd); /*输出上边框水平线*/ 
putch(0xbb); /*输出右上角边框 ┓*/ 
for(i=3;i<20;i++) 
{ 
gotoxy(10,i);putch(0xba); /*输出左垂直线*/ 
gotoxy(54,i);putch(0xba); 
} /*输出右垂直线*/ 
gotoxy(10,20);putch(0xc8); /*输出左上角边框┗*/ 
for(i=1;i<44;i++) 
putch(0xcd); /*输出下边框水平线*/ 
putch(0xbc); /*输出右下角边框┛*/ 
window(11,3,53,19); /* 制作显示菜单的窗口,大小根据菜单条数设计*/ 
clrscr(); /*清屏*/ 
for(i=0;i<16;i++) /*输出主菜单数组*/ 
{ 
gotoxy(10,i+1); 
cprintf("%s",menu[i]); 
} 
textbackground(BLACK); /*设置背景颜色为黑色*/ 
window(1,1,80,25); /*恢复原窗口大小*/ 
gotoxy(10,21); /*移动光标*/ 
do{ 
printf("\n Enter you choice(0~14):"); /*在菜单窗口外显示提示信息*/ 
scanf("%s",s); /*输入选择项*/ 
c=atoi(s); /*将输入的字符串转化为整形数*/ 
}while(c<0||c>14); /*选择项不在0~14之间重输*/ 
return c; /*返回选择项,主程序根据该数调用相应的函数*/ 
} 
STUDENT *init() 
{ 
return NULL; 
} 

/*创建链表*/ 
STUDENT *create() 
{ 
int i; int s; 
STUDENT *h=NULL,*info; /* STUDENT指向结构体的指针*/ 
for(;;) 
{ 
info=(STUDENT *)malloc(sizeof(STUDENT)); /*申请空间*/ 
if(!info) /*如果指针info为空*/ 
{ 
printf("\nout of memory"); /*输出内存溢出*/ 
return NULL; /*返回空指针*/ 
} 
inputs("enter no:",info->no,11); /*输入学号并校验*/ 
if(info->no[0]=='@') break; /*如果学号首字符为@则结束输入*/ 
inputs("enter name:",info->name,15); /*输入姓名,并进行校验*/ 
printf("please input %d score \n",N); /*提示开始输入成绩*/ 
s=0; /*计算每个学生的总分,初值为0*/ 
for(i=0;i<N;i++) /*N门课程循环N次*/ 
{ 
do{ 
printf("score%d:",i+1); /*提示输入第几门课程*/ 
scanf("%d",&info->score[i]); /*输入成绩*/ 
if(info->score[i]>100||info->score[i]<0) /*确保成绩在0~100之间*/ 
printf("bad data,repeat input\n"); /*出错提示信息*/ 
}while(info->score[i]>100||info->score[i]<0); 
s=s+info->score[i]; /*累加各门课程成绩*/ 
} 
info->sum=s; /*将总分保存*/ 
info->average=(float)s/N; /*求出平均值*/ 
info->order=0; /*未排序前此值为0*/ 
info->next=h; /*将头结点做为新输入结点的后继结点*/ 
h=info; /*新输入结点为新的头结点*/ 
} 
return(h); /*返回头指针*/ 
} 
/*输入字符串,并进行长度验证*/ 
inputs(char *prompt, char *s, int count) 
{ 
char p[255]; 
do{ 
printf(prompt); /*显示提示信息*/ 
scanf("%s",p); /*输入字符串*/ 
if(strlen(p)>count)printf("\n too long! \n"); /*进行长度校验,超过count值重输入*/ 
}while(strlen(p)>count); 
strcpy(s,p); /*将输入的字符串拷贝到字符串s中*/ 
} 
/*输出链表中结点信息*/ 
void print(STUDENT *h) 
{ 
int i=0; /* 统计记录条数*/ 
STUDENT *p; /*移动指针*/ 
clrscr(); /*清屏*/ 
p=h; /*初值为头指针*/ 
printf("\n\n\n****************************STUDENT********************************\n"); 
printf("|rec|nO | name | sc1| sc2| sc3| sum | ave |order|\n"); 
printf("|---|----------|---------------|----|----|----|--------|-------|-----|\n"); 
while(p!=NULL) 
{ 
i++; 
printf("|%3d |%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |\n", i, p->no,p->name,p->score[0],p->score[1], 
p->score[2],p->sum,p->average,p->order); 
p=p->next; 
} 
printf("**********************************end*********************************\n"); 
} 
/*删除记录*/ 
STUDENT *delete(STUDENT *h) 
{ 
STUDENT *p,*q; /*p为查找到要删除的结点指针,q为其前驱指针*/ 
char s[11]; /*存放学号*/ 
clrscr(); /*清屏*/ 
printf("please deleted no\n"); /*显示提示信息*/ 
scanf("%s",s); /*输入要删除记录的学号*/ 
q=p=h; /*给q和p赋初值头指针*/ 
while(strcmp(p->no,s)&&p!=NULL) /*当记录的学号不是要找的,或指针不为空时*/ 
{ 
q=p; /*将p指针值赋给q作为p的前驱指针*/ 
p=p->next; /*将p指针指向下一条记录*/ 
} 
if(p==NULL) /*如果p为空,说明链表中没有该结点*/ 
printf("\nlist no %s student\n",s); 
else /*p不为空,显示找到的记录信息*/ 
{ 
printf("*****************************have found***************************\n"); 
printf("|no | name | sc1| sc2| sc3| sum | ave |order|\n"); 
printf("|----------|---------------|----|----|----|--------|-------|-----|\n"); 
printf("|%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |\n", p->no, 
p->name,p->score[0],p->score[1],p->score[2],p->sum, 
p->average,p->order); 
printf("********************************end*******************************\n"); 
getch(); /*压任一键后,开始删除*/ 
if(p==h) /*如果p==h,说明被删结点是头结点*/ 
h=p->next; /*修改头指针指向下一条记录*/ 
else 
q->next=p->next; /*不是头指针,将p的后继结点作为q的后继结点*/ 
free(p); /*释放p所指结点空间*/ 
printf("\n have deleted No %s student\n",s); 
printf("Don't forget save\n");/*提示删除后不要忘记保存文件*/ 
} 
return(h); /*返回头指针*/ 
} 
/*查找记录*/ 
void search(STUDENT *h) 
{ 
STUDENT *p; /* 移动指针*/ 
char s[15]; /*存放姓名的字符数组*/ 
clrscr(); /*清屏幕*/ 
printf("please enter name for search\n"); 
scanf("%s",s); /*输入姓名*/ 
p=h; /*将头指针赋给p*/ 
while(strcmp(p->name,s)&&p!=NULL) /*当记录的姓名不是要找的,或指针不为空时*/ 
p=p->next; /*移动指针,指向下一结点*/ 
if(p==NULL) /*如果指针为空*/ 
printf("\nlist no %s student\n",s); /*显示没有该学生*/ 
else /*显示找到的记录信息*/ 
{ 
printf("\n\n*****************************havefound***************************\n"); 
printf("|nO | name | sc1| sc2| sc3| sum | ave |order|\n"); 
printf("|----------|---------------|----|----|----|--------|-------|-----|\n"); 
printf("|%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |\n", p->no, 
p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order); 
printf("********************************end*******************************\n"); 
} 
} 
/*插入记录*/ 
STUDENT *insert(STUDENT *h) 
{ 
STUDENT *p,*q,*info; /*p指向插入位置,q是其前驱,info指新插入记录*/ 
char s[11]; /*保存插入点位置的学号*/ 
int s1,i; 
printf("please enter location before the no\n"); 
scanf("%s",s); /*输入插入点学号*/ 
printf("\nplease new record\n"); /*提示输入记录信息*/ 
info=(STUDENT *)malloc(sizeof(STUDENT)); /*申请空间*/ 
if(!info) 
{ 
printf("\nout of memory"); /*如没有申请到,内存溢出*/ 
return NULL; /*返回空指针*/ 
} 
inputs("enter no:",info->no,11); /*输入学号*/ 
inputs("enter name:",info->name,15); /*输入姓名*/ 
printf("please input %d score \n",N); /*提示输入分数*/ 
s1=0; /*保存新记录的总分,初值为0*/ 
for(i=0;i<N;i++) /*N门课程循环N次输入成绩*/ 
{ 
do{ /*对数据进行验证,保证在0~100之间*/ 
printf("score%d:",i+1); 
scanf("%d",&info->score[i]); 
if(info->score[i]>100||info->score[i]<0) 
printf("bad data,repeat input\n"); 
}while(info->score[i]>100||info->score[i]<0); 
s1=s1+info->score[i]; /*计算总分*/ 
} 
info->sum=s1; /*将总分存入新记录中*/ 
info->average=(float)s1/N; /*计算均分*/ 
info->order=0; /*名次赋值0*/ 
info->next=NULL; /*设后继指针为空*/ 
p=h; /*将指针赋值给p*/ 
q=h; /*将指针赋值给q*/ 
while(strcmp(p->no,s)&&p!=NULL) /*查找插入位置*/ 
{ 
q=p; /*保存指针p,作为下一个p的前驱*/ 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -