简易学生管理系统c语言链表,求大神指点下,简易版学生管理系统,纯属练习链表...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

/*==========================================

程序名: 学生管理系统

版 本: 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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值