📄 004.cpp
字号:
#include <stdio.h>
#include<dos.h>
#include<stdlib.h> /*其它说明*/
#include<string.h> /*字符串函数*/
#include<ctype.h> /*字符操作函数*/
#include<malloc.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;
char *string[]={"* L=List all records *",
"* D=Delete a record selected by number *",
"* A=Append records *",
"* I=Insert records *",
"* R=Alter records *",
"* E=Search records *",
"* S=Sort records *",
"* H=Show this help message *",
"* V=Save records to a file *",
"* O=Load records from a file *",
"* C=Clear screen *",
"* Q=Quit System *"};
/*函数原型*/
STUDENT *init(); /*初始化函数*/
char menu(); /*菜单函数*/
void list(STUDENT *head); /* 显示全部记录*/
void search(STUDENT *head); /*查找记录*/
STUDENT *DelRecord(STUDENT *head); /*删除记录*/
STUDENT *sort(STUDENT *head); /*排序*/
STUDENT *insert(); /*插入记录*/
STUDENT *append(STUDENT *head);
void AltRecord(STUDENT *head);
void save(STUDENT *head); /*保存文件*/
STUDENT *load(); /*读文件*/
void show();
/***********退出程序******************/
void quit()
{
char ch;
STUDENT *head;
printf("!!!save?y/n");
ch=getchar();
if(ch=='y'||ch=='Y')
save(head);
exit(0);
}
char menu()
{
int i;
char n;
printf("********************************************************************************\n");
printf("* Student System Command Help *\n");
printf("\n\n");
printf("********************************************************************************\n");
for(i=0;i<12;i++){
printf("\t%s",string[i]);
printf("\n");
}
printf("********************************************************************************\n");
printf("\n\t\t\tEnter your choice:");
while(n<'A'||n>'z')
scanf("%c",&n);
return(n);
}
/*主函数界面*/
void main()
{
STUDENT *head;
head=init();
/* head=insert(); */
for(;;)
{switch(menu())
{
case 'l':
case 'L':list(head); break;
case 'd':
case 'D':head=DelRecord(head); break;
case 'a':
case 'A':append(head); break;
case 'i':
case 'I':head=insert(); break;
case 'r':
case 'R':AltRecord(head); break;
case 'e':
case 'E':search(head); break;
case 's':
case 'S':sort(head); break;
case 'h':
case 'H':show(); break;
case 'v':
case 'V':save(head); break;
case 'o':
case 'O':head=load(); break;
case 'c':
case 'C':system("cls");getchar(); break;
case 'q':
case 'Q':quit(); break;
}
}
}
/*初始化函数*/
STUDENT *init()
{
return NULL;
}
/*输入函数*/
STUDENT *insert()
{printf("Please input the student's dadas first:\n");
int i,s;
STUDENT *head=NULL,*p;
for(;;)
{p=(STUDENT *)malloc(LEN);
if(!p)
{printf("\nOut of memory.");
return (head); /*返回头指针,下同*/
}
printf("Enter the num(#:list end):");
scanf("%s",p->num);
if(p->num[0]=='#') break; /*如果学号首字符为#则结束输入*/
printf("Enter the name:");
scanf("%s",p->name);
printf("Please enter the %d scores\n",3); /*提示开始输入成绩*/
s=0; /*计算每个学生的总分,初值为0*/
for(i=0;i<3;i++) /*3门课程循环3次*/
{
do{
printf("score%d:\n",i+1);
scanf("%d",&p->score[i]);
if(p->score[i]<0 || p->score[i]>100) /*确保成绩在0~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; /*先用强制类型转换将s转换成float型,再求平均值*/
p->order=0; /*未排序前此值为0*/
p->next=head; /*将头结点做为新输入结点的后继结点*/
head=p; /*新输入结点为新的头结点*/
}
return(head);
}
/* 显示全部记录函数*/
void list(STUDENT *head)
{int i=0; /* 统计记录条数*/
STUDENT *p; /*移动指针*/
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[6];
printf("Please enter the Student's Number for searching.\n");
scanf("%s",s);
p=head; /*将头指针赋给p*/
while((strcmp(p->num,s)==0)&& 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("\nThere is no num %s student on the list.\n",s); /*显示没有该学生*/
}
/*修改记录函数*/
void AltRecord(STUDENT *head)
{STUDENT *p; /* 移动指针*/
char c[6];
int i,s;
printf("Please enter the Student's Number for alter.\n");
scanf("%s",c);
p=head; /*将头指针赋给p*/
while((strcmp(p->num,c)==0)&&p != NULL) /*当记录的姓名不是要找的,或指针不为空时*/
p=p->next; /*移动指针,指向下一结点*/
if(p!=NULL) /*如果指针不为空*/
{printf("The old datas:\n");
printf("\n************************************STUDENT************************************\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("Please input the new datas:\n");
scanf("%s",p->num);
printf("Enter the name:");
scanf("%s",p->name);
printf("Please enter the %d scores\n",3); /*提示开始输入成绩*/
s=0; /*计算每个学生的总分,初值为0*/
for(i=0;i<3;i++) /*3门课程循环3次*/
{
do{
printf("score%d:\n",i+1);
scanf("%d",&p->score[i]);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -