1.效果图
2.代码图
3.主要代码
#include "stdio.h" /*标准输入输出函数库*/
#include "stdlib.h" /*标准函数库*/
#include "string.h" /*字符串函数库*/
#include "conio.h" /*屏幕操作函数库*/
#define HEADER1 " ----------------------------STUDENT---------------------------------- \n"
#define HEADER2 " | number | name |Comp|Math|Eng | sum | ave |mici | \n"
#define HEADER3 " |---------------|---------------|----|----|----|--------|-------|-----| "
#define FORMAT " | %-10s |%-15s|%4d|%4d|%4d| %4d | %.2f |%4d |\n"
#define DATA p->data.num,p->data.name,p->data.egrade,p->data.mgrade,p->data.cgrade,p->data.total,p->data.ave,p->data.mingci
#define END " --------------------------------------------------------------------- \n"
int saveflag=0; /*是否需要存盘的标志变量*/
/*定义与学生有关的数据结构*/
typedef struct student /*标记为student*/
{
char num[10]; /*学号*/
char name[15]; /*姓名*/
int cgrade; /*C语言成绩*/
int mgrade; /*数学成绩*/
int egrade; /*英语成绩*/
int total; /*总分*/
float ave; /*平均分*/
int mingci; /*名次*/
};
/*定义每条记录或结点的数据结构,标记为:node*/
typedef struct node
{
struct student data; /*数据域*/
struct node *next; /*指针域*/
}Node,*Link; /*Node为node类型的结构变量,*Link为node类型的指针变量*/
void menu() /*主菜单*/
{
system("cls"); /*调用DOS命令,清屏.与clrscr()功能相同*/
textcolor(10); /*在文本模式中选择新的字符颜色*/
gotoxy(10,5); /*在文本窗口中设置光标*/
cprintf(" The Students' Grade Management System \n");
gotoxy(10,8);
cprintf(" *************************Menu********************************\n");
gotoxy(10,9);
cprintf(" * 1 input record 2 delete record *\n");
gotoxy(10,10);
cprintf(" * 3 search record 4 modify record *\n");
gotoxy(10,11);
cprintf(" * 5 insert record 6 count record *\n");
gotoxy(10,12);
cprintf(" * 7 sort reord 8 save record *\n");
gotoxy(10,13);
cprintf(" * 9 display record 0 quit system *\n");
gotoxy(10,14);
cprintf(" *************************************************************\n");
/*cprintf()送格式化输出至文本窗口屏幕中*/
}
void printheader() /*格式化输出表头*/
{
printf(HEADER1);
printf(HEADER2);
printf(HEADER3);
}
void printdata(Node *pp) /*格式化输出表中数据*/
{
Node* p;
p=pp;
printf(FORMAT,DATA);
}
void Wrong() /*输出按键错误信息*/
{
printf("\n\n\n\n\n***********Error:input has wrong! press any key to continue**********\n");
getchar();
}
void Nofind() /*输出未查找此学生的信息*/
{
printf("\n=====>Not find this student!\n");
}
void Disp(Link l) /*显示单链表l中存储的学生记录,内容为student结构中定义的内容*/
{
Node *p;
p=l->next; /*l存储的是单链表中头结点的指针,该头结点没有存储学生信息,指针域指向的后继结点才有学生信息*/
if(!p) /*p==NULL,NUll在stdlib中定义为0*/
{
printf("\n=====>Not student record!\n");
getchar();
return;
}
printf("\n\n");
printheader(); /*输出表格头部*/
while(p) /*逐条输出链表中存储的学生信息*/
{
printdata(p);
p=p->next; /*移动至下一个结点*/
printf(HEADER3);
}
getchar();
}
/*************************************************************
作用:用于定位链表中符合要求的节点,并返回指向该节点的指针
参数:findmess[]保存要查找的具体内容; nameornum[]保存按什么查找;
在单链表l中查找;
**************************************************************/
Node* Locate(Link l,char findmess[],char nameornum[])
{
Node *r;
if(strcmp(nameornum,"num")==0) /*按学号查询*/
{
r=l->next;
while(r)
{
if(strcmp(r->data.num,findmess)==0) /*若找到findmess值的学号*/
return r;
r=r->next;
}
}
else if(strcmp(nameornum,