/**********************************************************************
*制作时间:2008年9月17日
*程序名称:学生成绩管理系统
*程序功能:能实现对学生成绩的录入,插入,删除,查找,浏览,排序,
* 合计,保存,读取等功能
***********************************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define STRSNO "/n学生学号: "
#define STRSNAME "/n学生姓名: "
#define STRC "/nC企业要求与实践: "
#define STRTD "/nTD-SCDMA: "
#define STRLINUX "/nLinux 基础与开发: "
#define STRJ "/nJ2ME: "
#define STREN "/n专业英语: "
#define CPRJ 0
#define TD 1
#define LINUX 2
#define J2ME 3
#define CSENG 4
#define SUMSUBJ 5
#define STRINPUTERROR "输入有误,请重新输入!/n"
#define PRINTTITLE "/n 学号 | 姓 名 |C企业要求|TD-SCDMA|LINUX|J2ME|专业英语| 总分 | 平均 /n/n"
#define PRINTSTYLE " %s %s/t %d/t %d/t %d/t %d/t %d/t%d %.2f/n"
#define GETINPUTSTRDATA(str,data) printf(str); /
scanf("%s",&data)
#define GETINPUTINTDATA(str,data) printf(str); /
scanf("%d",&data)
#define CHECKINPUTFUNC(score) if( score > 100 || score < 0 ) /
{ /
printf(STRINPUTERROR); /
printf(STRC); /
scanf("%d",&score); /
}
#define INTTYPE 1
#define FLOATTYPE 2
#define STRTYPE 3
#define OFFSETSNO 0
#define OFFSETSNAME (OFFSETSNO+16*sizeof(char))
#define OFFSETSCORE (OFFSETSNAME+12*sizeof(char))
#define OFFSETSUM (OFFSETSCORE+SUMSUBJ*sizeof(int))
#define OFFSETAVR (OFFSETSUM+sizeof(int))
/****************************************************************************
*******************用 system("color 0A"); ***********************************
*****其中color后面的0是背景色代号,A是前景色代号。各颜色代码如下: **********
****************************************************************************/
#define USECOLORBLACK system("color 00") //0=黑色
#define USECOLORBLUE system("color 01") //1=蓝色
#define USECOLORGREEN system("color 02") //2=绿色
#define USECOLORLBLUE system("color 03") //3=湖蓝色
#define USECOLORRED system("color 04") //4=红色
#define USECOLORPURPLE system("color 05") //5=紫色
#define USECOLORYELLOW system("color 06") //6=黄色
#define USECOLORWHITE system("color 07") //7=白色
#define USECOLORDARK system("color 08") //8=灰色
#define USECOLORSKYBLUE system("color 09") //9=淡蓝色
#define USECOLORLGREEN system("color 0A") //A=淡绿色
#define USECOLORLLGREEN system("color 0B") //B=淡浅绿色
#define USECOLORLRED system("color 0C") //C=淡红色
#define USECOLORLPURPLE system("color 0D") //D=淡紫色
#define USECOLORLYELLOW system("color 0E") //E=淡黄色
#define USECOLORHWHITE system("color 0F") //F=亮白色
// 结构体定义学生的所有属性,包括学生证号,姓名,5门学科成绩,总成绩,平均成绩
struct studentLink
{
char sno[16];
char sname[12];
int arscore[SUMSUBJ];
int sum;
float avr;
struct studentLink* link;
};
typedef struct studentLink STULINK;
// 函数声明
STULINK* creat();
STULINK* searchbysno(STULINK *head, char * sno, STULINK **prev);
void insert(STULINK *head,STULINK *p, STULINK stu);
void delstunode(STULINK *head,STULINK *prelink,STULINK *dellink);
void insertbysno(STULINK *head, STULINK stu);
void menu(); //主菜单函数
void input(STULINK *head); //录入函数
void insertbysno(STULINK *head, STULINK stu);
void del(STULINK *head); //删除函数
void delbysno(STULINK* head); //按学生证号删除
void delbysname(STULINK* head); //按姓名删除
void select(STULINK* head); //查找函数
void selectsno(STULINK* head); //按学生证号查找
void selectsname(STULINK* head); //按姓名查找
void sort(STULINK *head,int offset, int type); //冒泡排序函数
void display(STULINK* head); //制表格式函数
void total(STULINK* head); //分类合计函数
void save(STULINK* head); //保存函数
void load(STULINK* head); //读取函数
void freelink(STULINK* head);
void sortready(STULINK* head);
void sortbyscore(STULINK* head);
// 主函数
int main(void)
{
int in; //选择功能的变量
char ch='y'; //选择是否继续时的变量,(y / n)
STULINK* stuhead=NULL;
stuhead = creat();
//USECOLORLLGREEN;
if(stuhead==NULL)
return 1;
load(stuhead);
do
{
menu();
scanf("%d",&in);
if(in<0 || in>7)
{
printf("/a输入有误,请在0~7之间选择!");
continue;
}
else if(in==0)
{
printf("确定要退出程序吗?(y / n) ");
scanf(" %c",&ch);
printf("/n");
if(ch=='Y' || ch=='y')
{
printf("谢谢您的使用,再见!");
break;
}
}
switch(in)
{
case 1: //录入
printf("/n----------------------------- 请输入学员信息 -----------------------------");
input(stuhead);
break;
case 2: //插入
if(stuhead->sum!=0)
{
del(stuhead);
}
else
{
printf("/a没有数据!/n"); //(如果学生人数为0,弹出此消息)
}
break;
case 3: //删除
if(stuhead->sum!=0)
{
select(stuhead);
}
else
{
printf("/a没有数据!/n");
}
break;
case 4: //查找
if(stuhead->sum!=0)
{
display(stuhead);
}
else
{
printf("/a没有数据!/n");
}
break;
case 5: &