链表法实现学生数据库管理(我是菜鸟,见笑了!)

原创 2006年05月26日 23:09:00

//功能:链表法实现学生数据库管理
# 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;
}
      

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

数据结构-链表的简实现->学生管理系统

C++第一节课,老师给我们留了个作业,用C语言实现学生管系统。 要求实现:增删改查(包含文件操作) 本学渣就腆着脸发出来了。简单小程序。C语言初学的一点小应用 #include #include...

用链表写的学生管理系统 成绩的录入与查询都已经是实现了

欢迎拍砖

C语言简单用链表实现学生管理系统

#define _CRT_SECURE_NO_WARNINGS #include #include #include #include FILE *stud; FILE *tempx; enum op...

学生成绩管理系统(链表的实现)

学生成绩管理系统

【单链表实现】学生管理系统(缺少文件输入输出流)

本篇博文结合学过的数据结构单链表的知识,来实现一个学生管理系统的创建,仍有不完善的地方,望大家指出,对于文件输入输出流,会在后续添加。 详细代码如下: Garde.h #pragma o...

c用链表实现学生成绩管理系统 MIS

// 学生成绩管理系统 /*  1.录入学生信息  2.打印学生信息  3.保存学生信息  4.读取学生信息  5.统计所有学生人数  6.查找学生信息  7.修改某个学生的信息  ...

算法实验 学生管理系统 双向链表实现

对于前面的内容暂时概不罗嗦 直接进入正题 首先是类库和头文件 #include #include using namespace std; //直接定义一个Stuent类为一个结点 class ...

C语言链表实现的简易学生成绩管理系统

当初准备用数组去实现,发现比较麻烦,对比下,使用链表去实现。效果还不错。实现查询,修改,删除,插入,求总和,平均值,排名功能。在TC上运行通过。          代码及注释如下:    ...
  • zzobin
  • zzobin
  • 2011-12-17 00:54
  • 6185

用单链表实现学生信息管理系统

最近,在准备找工作,看到了单链表这里,就自己试着用单链表编写了一个学生信息管理系统。自己水平不高,很简单的一个小系统,贴出来请大家帮我指出错误,请大家指教!谢谢! // 学生信息系统.cpp : De...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)