该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
/*==========================================
程序名: 学生管理系统
版 本: V 1.0
============================================*/
#include
#include
#include
#include
#include
/*-----------------------参数-------------------------*/
typedef struct stu{//每个学生的参数
int number;
char name[8];
int age;
char sex[4];
int math; //数学
int Physics; //物理
int science; //科学
int chemistry; //化学
struct stu * next;
}Stu,*pStu;
/*-------------------函数定义---------------------------*/
void StartPage(); //---开始界面.
void EndPage(); //---退出界面.
void Select(pStu,int); //---查找函数.
void Delete(pStu,int); //---删除函数.
void Update(pStu,int); //---修改函数.
void Sort(pStu Ps); //---排序函数.
void CreatStudentInfo(pStu);//---创建学生信息函数.
void Pos(short x,short y);//---光标函数
void Run(pStu); //---程序运行.
void ProgramInfo();
int Lengh(pStu);//---计算长度
bool RepNumber(pStu,int ); //判断Number重复。
bool EmptyList(pStu);
/*---------------------函数----------------------------*/
void Pos(short x,short y)//设置光标位置函数
{
COORD pos;
pos.X=x;
pos.Y=y;
HANDLE hOutput=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOutput,pos);
return;
}
bool EmptyList(pStu pS)
{
if(NULL == pS->next)
return true;
else
return false;
}
void StartPage(int * p)
{
/*===============函数参数==============
返 回 值:无.
变量说明:无.
函数内容:打印菜单页
内容提示:
Pos(x,y) ---x横向坐标,y竖向坐标
Pos(0,0) 是屏幕左上方顶点, Pos(0,24) 是左下角,
Pos(79,0) 是右上角 Pos(79,24)是右下角.
======================================*/
Pos(34,1);
printf("学生管理系统");
Pos(13,5);
printf("1.查找学生信息.");
Pos(55,5);
printf("2.删除学生信息.");
Pos(13,10);
printf("3.增加学生信息.");
Pos(55,10);
printf("4.修改学生信息.");
Pos(13,15);
printf("5.关于管理软件.");
Pos(55,15);
printf("6.退出管理软件.");
Pos(28,23);
printf("2013.Copy Right By FanXiaoBao.");
Pos(40,21);
printf("请选择--->");
scanf("%d",&(*p));
fflush(stdin);
if(*p<=6 && *p>=1 )
{
system("cls");
return;
}
else
{
printf("输入错误!请重新输入!!");
Sleep(1000);
system("cls");
StartPage(p);
}
return;
}//---StartPage.
void EndPage()
{
system("cls");
Pos(30,18);
printf("(*^__^*) 嘻嘻……欢迎下次使用!\n");
Pos(28,23);
printf("2013.Copy Right By FXiaobao.");
Pos(35,20);
system("pause");
return;
} //---EndPage.
void run(pStu pS)
{
/*===============================
程序运行函数.
返 回 值:无.
变量说明: int i; 开关语句执行条件.
=================================*/
int i,ID;
system("color a");
StartPage(&i);
switch(i)
{
case 1 :{
system("cls");
Pos(7,7);
printf("Input Stu.Id Search --->");
scanf("%d",&ID);
Select(pS,ID); //查找
system("cls");
run(pS);
break;
}
case 2 :{
system("cls");
Pos(7,7);
printf("Input Stu.Id Delete --->");
scanf("%d",&ID);
Delete(pS,ID);//删除
system("cls");
run(pS);
break;
}
case 3 :{
CreatStudentInfo(pS); //创建
//Sort(pS); //排序
system("cls");
run(pS);
break;
}
case 4 :{
system("cls");
Pos(7,7);
printf("Input Stu.Id Update --->");
scanf("%d",&ID);
Update(pS,ID);//修改
system("cls");
run(pS);
break;
}
case 5 :{
ProgramInfo(); //系统信息
system("cls");
run(pS);
break;
}
case 6 :{
EndPage(); //结束画面.
break;
}
}
return;
}//running */
void CreatStudentInfo(pStu pS)
{
/*=============================
*函数功能: 录入新学生信息.
*变量说明: 无.
*算法说明: 动态链表前插法.
============================*/
pStu p=pS;
pStu New = (pStu)malloc(sizeof(Stu));
if(NULL == New)
{
system("cls");
Pos(7,7);
printf("Error!\n");
system("pause");
exit(-1);
}
else
{
/* input vales
* ....
* ....
* .... */
system("cls");
Pos(7,7);
printf("Inptu Student's Name--->");//Name
gets(New->name);
system("cls");
Pos(7,7);
printf("Inptu Student's Age--->");//Age
scanf("%d",&New->age);
part1:system("cls");
Pos(7,7);
printf("Input Student's number--->");// Number
scanf("%d",&New->number);
if(RepNumber(pS,New->number))
goto part1;
fflush(stdin);
system("cls");
Pos(7,7);
printf("Inptu Student's Sex--->");//Sex
gets(New->sex);
system("cls");
Pos(7,7);
printf("Inptu Student's Math_Grade--->");//数学成绩
scanf("%d",&New->math);
system("cls");
Pos(7,7);
printf("Inptu Student's Physics_Grade--->");//物理成绩
scanf("%d",&New->Physics);
system("cls");
Pos(7,7);
printf("Inptu Student's Science--->");//科学成绩
scanf("%d",&New->science);
system("cls");
Pos(7,7);
printf("Inptu Student's Chemistry--->");//化学成绩
scanf("%d",&New->chemistry);
printf("They Are Go The Way!Now let We See It..\n");
system("cls");
Pos(3,3);
printf("This Student's Id --->%d\n",New->number);
Pos(5,5);
printf("This Student's Name --->%s\n",New->name);
Pos(7,7);
printf("This Student's Age ---->%d\n",New->age);
Pos(9,9);
printf("This Student's Sex ---->%s\n",New->sex);
Pos(11,11);
printf("This Student's Chemistry_Grade is -->%d\n",New->chemistry);
Pos(13,13);
printf("This Student's Math_Grade is ---->%d\n",New->math);
Pos(15,15);
printf("This Student's Physics_Grade is -->%d\n",New->Physics);
Pos(17,17);
printf("This Student's Science_Grade is --->%d\n",New->science);
system("pause");
p->next=New;
New->next=NULL;
p=New;
}
system("cls");
return;
}
void Delete(pStu pS,int number)
{
/*==================
* 功 能: 将通过编号查找到的学生 从整个链表内去掉 并返回该学生的所有信息.
* 返 回 值: 无
* 参 数: 指向头结点的指针pS, 要查找的学生编号.
=====================*/
pStu p = pS;
while(NULL != p)
if(NULL == p->next)
{
system("cls");
Pos(7,7);
printf("Cannot Search!\n");
Sleep(500);
return;
}
else if(p->next->number == number)
{
pStu q = p->next;
/*....
....
puts pStu * q->vals[student's information] */
system("cls");
Pos(7,7);
printf("Delete Student's Name--->%s\n",q->name);//Name
//gets(p->name);
printf("Delete Student's Age--->%d\n",q->age);//Age
//scanf("%d",&q->age);
printf("Delete Student's number--->%d\n",q->number);// Number
//scanf("%d",&q->number);
printf("Delete Student's Sex--->%s\n",q->sex);//Sex
//gets(p->sex);
printf("Delete Student's Math_Grade--->%d\n",q->math);//数学成绩
//scanf("%d",&q->math);
printf("Delete Student's Physics_Grade--->%d\n",q->Physics);//物理成绩
//scanf("%d",&q->Physics);
printf("Delete Student's Science--->%d\n",q->science);//科学成绩
//scanf("%d",&q->science);
printf("Delete Student's Chemistry--->%d\n",q->chemistry);//化学成绩
//scanf("%d",&q->chemistry);
p->next=q->next;
free(q);
q=NULL;
}
return;
}
void Update(pStu pS,int number)
{
pStu p = pS->next;
while(NULL != p)
if(p->number == number)
{
printf(".....");//
/*printf Update Student's Vals_List
switch(vals)
case 1 ...
case 2..
*/
}
else
{
system("color c");
Pos(7,7);
printf("Search Error!\n");
Pos(30,24);
system("pause");
}
return;
}
void Select(pStu pS,int number)
{
/*=====================
* 功 能:查找某个学生信息 并打印出来!
* 参 数:pStu 指向链表头的指针 , 需要搜索的学生ID
* 返回值:无.
=======================*/
if(EmptyList(pS))
{
system("cls");
Pos(7,7);
printf("Cannot Search This Student's Information!\n");
system("pause");
}
else{
pStu p = pS->next;
while(p != NULL);
{
if(p->number == number)
{
system("cls");
Pos(3,3);
printf("This Student's Id --->%d\n",p->number);
Pos(5,5);
printf("This Student's Name --->%s\n",p->name);
Pos(7,7);
printf("This Student's Age ---->%d\n",p->age);
Pos(9,9);
printf("This Student's Sex ---->%s\n",p->sex);
Pos(11,11);
printf("This Student's Chemistry_Grade is -->%d\n",p->chemistry);
Pos(13,13);
printf("This Student's Math_Grade is ---->%d\n",p->math);
Pos(15,15);
printf("This Student's Physics_Grade is -->%d\n",p->Physics);
Pos(17,17);
printf("This Student's Science_Grade is --->%d\n",p->science);
system("pause");
return;
}
else{
system("cls");
Pos(7,7);
printf("Cannot Search This Student's Information!\n");
system("pause");
return;
}
p=p->next;
}
}
return;
}
void ProgramInfo(void)
{
system("cls");
Pos(7,7);
printf("Copy Right By FanXiaoBao.\n");
Sleep(2000);
Pos(30,24);
system("pause");
return;
}
int Lengh(pStu pS)
{
/*====================
*功 能:计算链表长度
*参 数:链表头指针
*返回值:无.
====================*/
int len=0;
pStu p = pS;
while(NULL != p)
len++;
return len;
}//---Lengh
void Sort(pStu pS)//冒泡排序链表..
{int i,j,len=Lengh(pS);
pStu p,q;
pStu tmp = (pStu)malloc(sizeof(Stu));
if(NULL == tmp)
{
system("cls");
Pos(7,7);
printf("Error!\n");
Sleep(500);
exit(-1);
}
tmp->next=NULL;
for(i=0,p=pS->next;inext)
for(j=i+1,q=p->next;jnext)
if(p->number > q->number)
{
tmp->age = p->age;
tmp->chemistry=p->chemistry;
tmp->math=p->math;
strcpy(tmp->name,p->name);
tmp->number=p->number;
tmp->Physics=p->Physics;
tmp->science=p->science;
strcpy(tmp->sex,p->sex);
p->age = q->age;
p->chemistry=q->chemistry;
p->math=q->math;
strcpy(p->name,q->name);
p->number=q->number;
p->Physics=q->Physics;
p->science=q->science;
strcpy(p->sex,q->sex);
q->age = tmp->age;
q->chemistry=tmp->chemistry;
q->math=tmp->math;
strcpy(q->name,tmp->name);
q->number=tmp->number;
q->Physics=tmp->Physics;
q->science=tmp->science;
strcpy(q->sex,tmp->sex);
}
free(tmp);
tmp =NULL;
return;
}
bool RepNumber(pStu pS,int number)
{
if(EmptyList(pS))
return false;
else
{
pStu p = pS->next;
while(NULL != p) //空
{
if(p->number == number) //编号重复
return false;
p=p->next;
}
}
return true;
}
int main(void)
{
pStu pS = (pStu)malloc(sizeof(Stu));
if(NULL==pS)
return 0;
else
pS->next=NULL;
run(pS);
free(pS);
pS=NULL;
return 0;
}