链表法实现学生数据库管理(我是菜鸟,见笑了!)
来源:互联网 发布:类似picasa的软件 编辑:程序博客网 时间:2024/04/29 17:59
//功能:链表法实现学生数据库管理
# include <iostream>
# include <iomanip.h> //调用setw()
# include <stdlib.h> //调用exit()
# include <string.h> //调用strlen()判断字符串长度
# define NULL 0
# define ERROR1 0
# define ERROR "/n/nWANNING!DATA ERROR.PLEASE INPUT AGAIN./n/n"
# define OK 1
typedef struct student
{
int num; //学号
char name[8]; //姓名
int age; //年龄
int score; //成绩
}STU;
typedef struct LNODE
{
STU data;
struct LNODE *next;
}Lnode,*Linklist;
void check(STU &e)
{
do //保证输入数据的合法性
{
cout<<"/nPLEASE INPUT THE THE STUDENT'S NUM(0000-9999):/n";
cin>>e.num;
if (e.num<0||e.num>9999||isdigit(e.num)==0)
{
cout<<ERROR;
}
}while (e.num<0||e.num>9999||isdigit(e.num)==0);
do
{
cout<<"/nPLEASE INPUT THE THE STUDENT'S NAME(NOT MORE THAN 8):/n";
cin>>e.name;
if (strlen(e.name)>8)
{
cout<<ERROR;
}
}while (strlen(e.name)>8);
do
{
cout<<"/nPLEASE INPUT THE THE STUDENT'S AGE(000-100):/n";
cin>>e.age;
if (e.age<0||e.age>100)
{
cout<<ERROR;
}
}while (e.age<0||e.age>100);
do
{
cout<<"/nPLEASE INPUT THE THE STUDENT'S SCORE(000-100):/n";
cin>>e.score;
if (e.score<0||e.score>100)
{
cout<<ERROR;
}
}while (e.score<0||e.score>100);
}
int check1(int i,Linklist p)
{
if ((p->data.num<0||p->data.num>9999)||(strlen(p->data.name)>8)
||(p->data.age<0||p->data.age>100)||(p->data.score<0||p->data.score>100))
{
cout<<ERROR;
return 1;
}
else
{
return 0;
}
}
//打印出数据
void print(Linklist L)
{
int i=1;
Linklist p=L->next;
cout<<"/n/n/t/tTHESE "<<L->data.num<<" RECORDS ARE:"<<endl; //输出数据数
if (L->data.num)
{
cout<<"/n/t/tno./tnum/tname/tage/tscore/n"; //输出表头
}
while (p&&i<=L->data.num+1) //输出数据
{
cout<<"/n/t/t"<<setw(3)<<i++;
cout<<"/t"<<setw(4)<<p->data.num<<setw(9)<<p->data.name<<setw(6)<<p->data.age<<setw(8)<<p->data.score;
p=p->next;
}
cout<<endl;
}
//功能:将数据插入到指定点之前
int listinsert(Linklist L,int i,STU e)
{
Linklist p=L;
Linklist s;
s=(Linklist)malloc(sizeof(Lnode));
if (!s)
{
return ERROR1;
}
s->data=e;
while (p&&i-1) //指向插入点之前
{
p=p->next;
i--;
}
s->next=p->next; //插入s
p->next=s;
++L->data.num;
return OK;
}
//功能:删除指定数据
void listdelete(Linklist L,int i)
{
Linklist p=L;
while (p&&i-1) //指向插入点之前
{
p=p->next;
i--;
}
p->next=p->next->next; //删除节点
--L->data.num;
}
//功能:修改指定数据
void ListRevise(Linklist L,int i)
{
int j=0;
Linklist p=L->next;
while (p&&i-1) //指向插入点
{
p=p->next;
i--;
}
//输出要修改的数据
cout<<"/t********************************************************/n";
cout<<"/t/tnum/tname/tage/tscore/n";
cout<<"/t/t"<<setw(4)<<p->data.num<<setw(9)<<p->data.name<<setw(6)<<p->data.age<<setw(8)<<p->data.score;
cout<<"/n/t********************************************************/n";
do //输出子菜单
{
cout<<"/nWHICH DATA DO YOU WANT TO CHANGE:/n ";
cout<<"/t REVISE /n";
cout<<"/t********************************************************/n";
cout<<"/t/t 1.SUM 2.NAME/n";
cout<<"/t/t 3.AGE 4.SCORE/n";
cout<<"/t********************************************************/n";
cin>>i;
if (i<0||i>4)
{
cout<<ERROR;
}
}while (i<0||i>4);
switch (i) //修改数据
{
case 1:
{
do
{
cout<<"/nPlease input the new num: ";
cin>>p->data.num;
}while (check1(i,p));
break;
}
case 2:
{
do
{
cout<<"/nPlease input the new name: ";
cin>>p->data.name;
}while (check1(i,p));
break;
}
case 3:
{
do
{
cout<<"/nPlease input the new sorce: ";
cin>>p->data.age;
}while (check1(i,p));
break;
}
case 4:
{
do
{
cout<<"/nPlease input the new sorce: ";
cin>>p->data.score;
}while (check1(i,p));
break;
}
}
}
//功能:打印菜单
int printmanu()
{
int i=0; //选项
do //保证选择有效
{
cout<<"/t MAUN /n";
cout<<"/t********************************************************/n";
cout<<"/t/t1.INSERT DATA 2.DELETE DATA/n";
cout<<"/t/t3.CHANGE DATA 4.PRINT DATA/n";
cout<<"/t/t5.EXIT/n";
cout<<"/t********************************************************/n";
cout<<"/n/tPLEASE CHOOSE THE NO.(1-5)/n";
cin>>i;
if (i<1||i>5)
{
cout<<ERROR;
}
}while (i<1||i>5);
return(i);
}
int main()
{
int i;
STU e;
Linklist L;
L=(Linklist)malloc(sizeof(Lnode)); //创建空链表
if (!L)
{
return ERROR1;
}
L->data.num=0;
L->next=NULL;
e.num=1001; //初始化数据
strcpy(e.name,"mobin");
e.age=20;
e.score=87;
listinsert(L,1,e);
e.num=1002;
strcpy(e.name,"woniu");
e.age=20;
e.score=92;
listinsert(L,2,e);
do
{
i=printmanu(); //打印菜单并取得选择项
switch (i)
{
case 1:
{
print(L);
do
{
cout<<"/nPLEASE INPUT THE PODETION WHICH YOU WANT TO INSERT:/n ";
cin>>i;
if (i<1||i>L->data.num+1)
{
cout<<ERROR;
}
}while (i<1||i>L->data.num+1);
cout<<"/n/n/t/tPLEASE INPUT THE STUDENT'S DATA./n";
check(e);
listinsert(L,i,e); //插入数据
cout<<"/n/nINSERT SUCCESSFUL!/n";
cout<<"/n/t/tnum/tname/tage/tscore/n";
cout<<"/t"<<setw(4)<<e.num<<setw(9)<<e.name<<setw(6)<<e.age<<setw(8)<<e.score;
break;
}
case 2:
{
print(L);
do
{
cout<<"/nPLEASE CHOOSE THE NO. WHICH YOU WANT TO DELETE:/n ";
cin>>i;
if (i<1||i>L->data.num)
{
cout<<ERROR;
}
}while (i<1||i>L->data.num);
listdelete(L,i); //删除数据
cout<<endl;
print(L);
break;
}
case 3:
{
do
{
print(L);
cout<<"/nWHICH NO. DO YOU WANT TO REVISE:/n ";
cin>>i;
if (i<0||i>L->data.num)
{
cout<<ERROR;
}
}while (i<1||i>L->data.num);
ListRevise(L,i); //修改数据
print(L);
break;
}
case 4:
{
print(L);
break;
}
default: //结束程序
{
exit(0);
}
}
}while(i=5);
return OK;
}
- 链表法实现学生数据库管理(我是菜鸟,见笑了!)
- java实现学生成绩管理(未连数据库)
- 菜鸟学习c++—实现学生登陆管理系统
- 我是菜鸟:concurrentHashMap实现原理
- 我是菜鸟,我开通了博客
- 学生管理系统设计(数据库版)
- 学生成绩管理数据库
- 我是菜鸟:java数据库操作基本知识
- 学生管理系统--实现了系统的增删改查~
- 控制台简单实现mysql数据库学生管理系统
- jdbc连接Oracle数据库实现学生管理系统
- 我是学生
- 学生管理系统(利用指针实现)
- 学生管理系统实现
- 用单链表实现学生管理
- 我是菜鸟
- 我是菜鸟
- 我是菜鸟~
- 如何杀死小说中的主角(武侠)
- 新!
- 其它web技术概述
- 网址集锦
- 凡人日记
- 链表法实现学生数据库管理(我是菜鸟,见笑了!)
- 编写安全的ASP代码
- Video Demystified(视频解密) 4th edition
- 明天去听师兄答辩
- The color of night ---lauren christy
- Everything Do
- 基于回合制的在线棋类对战游戏(图)
- 论金庸小说的现代精神
- 介绍一篇关于session的好文章,写的很详细(jsp-servlet 技术)----(转贴自JavaResearch)