数据库2.docx

上传人:b****5 文档编号:11886607 上传时间:2023-04-08 格式:DOCX 页数:11 大小:18.35KB
下载 相关 举报
数据库2.docx_第1页
第1页 / 共11页
数据库2.docx_第2页
第2页 / 共11页
数据库2.docx_第3页
第3页 / 共11页
数据库2.docx_第4页
第4页 / 共11页
数据库2.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

数据库2.docx

《数据库2.docx》由会员分享,可在线阅读,更多相关《数据库2.docx(11页珍藏版)》请在冰豆网上搜索。

数据库2.docx

数据库2

上一课,举了一个例子,主要实现了一个顺序表的相关操作,现在做个小小的实验,即实现一个小小的学生成绩管理系统。

需求如下:

用顺序表实现一个完成一个班级的一个学期的所有课程的管理:

能够增加、删除、修改学生的成绩记录。

假设学生有学号id,班级名class_name,学期term,性别sex,姓名name,语文chinese,英语english,数学maths等字段。

系统分析:

系统有增加,删除,修改,查找等操作,都放在一个主界面选择进行。

源码如下(实现是在VC++6.0下编译通过):

//student.cpp:

Definestheentrypointfortheconsoleapplication.

/**说明:

本程序主要实现学生成绩管理的相关操作,如添加,删除,修改,查询等****

*****************************************************************************

*****************************************************************************/

#include"stdafx.h"

#include"iostream.h"

#include

#include

#include

 

structstudent

 charterm[10];//学期

 char class_name[10];//班级名

 intid; //学号id

 charname[30];//姓名

 charsex[2]; //性别 

 floatchinese;//语文

 float english;//英语

 float maths;//数学

};

typedefstructstudentDataType;// 指定structstudent为DataType

structSeqList

{

 intMAXLENGTH;    //顺序表中最大元素的个数

 intcount;        //存放线性表中元素的个数count<=MAXLENGTH

 DataType*element; //element[0],element[1],...,element[n-1]存放线性表中的元素

};

typedefstructSeqList*MySeqList; 

//初始化并创建空顺序表

MySeqListinitSeqList(intm);

//判断线性表是否为空

intisEmptySeqList(MySeqListmySeqList);

//在顺序表中求某元素的下标

intlocateSeqList(MySeqListmySeqList,intid);

//在顺序表中修改值

intupdateSeqList(MySeqListmySeqList,intid);

//顺序表的插入(元素p之前插入)

intinsertPreSeqList(MySeqListmySeqList,intp,DataTypex);

//顺序表的插入(元素p之后插入)

intinsertNextSeqList(MySeqListmySeqList,intp,DataTypex);

//顺序表的删除(根据下标删除)

intdeleteSeqList(MySeqListmySeqList,intp);

//顺序表的删除(根据元素值删除)

intdeleteSeqListByValue(MySeqListmySeqList,intid);

//将顺序表表示的线性表逆置

intreverseSeqList(MySeqListmySeqList);

/*

*删除线性表中所有值为x的值

*我给出的算法,在一个线性表中实现,设置了2个游标

*/

intdeleteAllVSeqList(MySeqListmySeqList,DataTypex);

//求出下标为i的元素的前驱和后继

intfindPrePostSeqList(MySeqListmySeqList,inti,DataType&m,DataType&n);

//顺序表实现部分:

找出值为x的元素的前驱和后继的存储位置(即下标)

intlocatePrePostSeqList(MySeqListmySeqList,DataTypex,int&i,int&j);

//输出线性表的元素值

voidprintSeqList(MySeqList&mySeqList);

//根据学生id,输出线性表的元素值

voidprintSeqListById(MySeqList&mySeqList,intid);

//在顺序表中修改值

intupdateSeqList(MySeqListmySeqList,intid)

{

 intiRc=locateSeqList(mySeqList,id);

 if(iRc==-1)

 {

 printf("不存在指定下标!

\n");

 return(0);

 }

 

 cout<<"classname:

";      

 cin>>mySeqList->element[iRc].class_name;

          

 cout<<"term:

";

 cin>>mySeqList->element[iRc].term;

 cout<<"学号:

";

 cin>>mySeqList->element[iRc].id;

 cout<<"name:

";

 cin>>mySeqList->element[iRc].name;

 cout<<"sex:

";

 cin>>mySeqList->element[iRc].sex;

 cout<<"english:

";

 cin>>mySeqList->element[iRc].english;

   

 cout<<"chinese:

";

 cin>>mySeqList->element[iRc].chinese;

 cout<<"maths:

";

 cin>>mySeqList->element[iRc].maths;   

 

 return1;

}

 

//功能:

创建空顺序表

MySeqListinitSeqList(intm)

{

 MySeqListmySeqList=(MySeqList)malloc(sizeof(structSeqList));//分配内存空间

 if(mySeqList!

=NULL)

 {

 mySeqList->element=(DataType*)malloc(sizeof(DataType)*m);  //为里面的元素分配m个DataType大小的内存空间,相当于初始化了一个长度为m的数组

 if(mySeqList->element)

 {

  mySeqList->MAXLENGTH=m; //如果创建了元素,MAXLENGTH为最大元素的个数

  mySeqList->count=0; //空表长度为0

  return(mySeqList);

 }

 else

  free(mySeqList);       //记得要手动释放空间,否则很容易产生内存泄漏

 }

 printf("内存空间不足,请关闭一些程序,然后再试!

\n");//存储分配失败,提示空间不足

 returnNULL;

}

//功能:

判断线性表是否为空

intisEmptySeqList(MySeqListmySeqList)

{

 return(mySeqList->count==0);

}

//功能:

在顺序表中求某元素的下标,没有查找到,则返回-1

intlocateSeqList(MySeqListmySeqList,intid)

{

 for(inti=0;icount;++i)

 if(mySeqList->element[i].id==id)            //传入一个元素x,查找到后返回下标i

  return(i);

 return(-1);

}

//功能:

顺序表的pos下标前面插入,插入成功返回1,失败返回0

intinsertPreSeqList(MySeqListmySeqList,intpos,DataTypex)

{

 ++mySeqList->count;

 if(mySeqList->count>mySeqList->MAXLENGTH)     //溢出

 {

 --mySeqList->count;    

 printf("表产生了溢出!

\n");

 return(0);

 }

 if(pos<0||pos>=mySeqList->count)        //不存在下标为pos的元素

 {

 --mySeqList->count;

 printf("不存在指定下标!

\n");

 return(0);

 }

 for(inti=mySeqList->count-1;i!

=pos;--i)

 mySeqList->element[i]=mySeqList->element[i-1];//插入位置及之后的元素均后移一个位置

 mySeqList->element[i]=x;                         //插入元素x

 return

(1);

}

//功能:

顺序表的pos下标后面插入,插入成功返回1,失败返回0

intinsertNextSeqList(MySeqListmySeqList,intpos,DataTypex)

{

 if(pos<0||pos>=mySeqList->count)

 {

 printf("不存在指定下标!

\n");

 return(0);

 }

 ++mySeqList->count;

 if(mySeqList->count>=mySeqList->MAXLENGTH)

 {

 --mySeqList->count;

 printf("表产生了溢出!

\n");

 return(0);

 }

 

 for(inti=mySeqList->count-1;i!

=pos+1;--i)

 mySeqList->element[i]=mySeqList->element[i-1]; //同样地,把pos+1插入位置及之后的元素均后移一个位置

 mySeqList->element[i]=x;                          //插入元素x

 return

(1);

}

//功能:

顺序表的删除(根据下标删除)

intdeleteSeqList(MySeqList mySeqList,intpos)

{

 if(pos<0||pos>=mySeqList->count)     //不存在下标为pos的元素,注意下标范围是从0到count-1

 {

 printf("不存在指定下标!

\n");

 return(0);

 }

 

 for(inti=pos;icount-1;++i)

 mySeqList->element[i]=mySeqList->element[i+1];  //被删除元素之后的元素均前移一个位置

 --mySeqList->count;                                 //元素个数减1

 return

(1);

}

//功能:

根据元素值删除,实现顺序表的删除

intdeleteSeqListByValue(MySeqListmySeqList,intid)

{

 intpos=locateSeqList(mySeqList,id);

 if(pos==-1)

 {

 printf("不存在指定下标!

\n");

 return(0);

 }

 deleteSeqList(mySeqList,pos);

 return

(1);

}

 

/*

*功能:

删除线性表中所有学生ID为x的值

*/

intdeleteAllSeqListByValue(MySeqListmySeqList,intx)

{

 if(mySeqList->count==0)

 {

 printf("该表为空!

\n");

 return(0);

 }

 for(inti=0;i!

=mySeqList->count;++i)

 {

 

 if(mySeqList->element[i].id==x)

 {  

     deleteSeqListByValue(mySeqList,x);            //删除x,删除后要将下标减少1

     i--;

 }

 }

 return

(1);

}

/*

*功能:

删除线性表中所有值为x的值的另一种算法

*

*/

intdeleteAllVSeqList(MySeqListmySeqList,intx)

{

 if(mySeqList->count==0)

 {

 printf("该表为空!

\n");

 return(0);

 }

 intp=0,q=0;

 while(mySeqList->element[p].id!

=x&&p!

=mySeqList->count-1) //跳过开始不是x的元素

 {

 ++p;

 ++q;

 }

 for(;p!

=mySeqList->count-1;++p)                           //遍历元素,不遍历最后一个元素(为了防止越界)

 {

 while(mySeqList->element[p].id==x&&p!

=mySeqList->count-1)//如果元素是x,则游标p后移(用while处理多个x连续的情况)

 {

  ++p;

 }

 if(p!

=mySeqList->count-1)

 {

  mySeqList->element[q]=mySeqList->element[p];

  ++q;

 }

 }

 if(mySeqList->element[mySeqList->count-1].id!

=x)

 {

 mySeqList->element[q]=mySeqList->element[mySeqList->count-1];

 ++q;

 }

 mySeqList->count=q;

 return

(1);

}

 

//功能:

找出值为x的元素的前驱和后继的存储位置(即下标)

intlocatePrePostSeqList(MySeqListmySeqList,intx,int&i,int&j)

{

 intk=locateSeqList(mySeqList,x);

 if(k==-1)

 return(0);

 if(k==0)

 i=-1;

 else

 i=k-1;

 if(k==mySeqList->count-1)

 j=-1;

 else

 j=k+1;

 return

(1);

}

//输出线性表的元素值

voidprintSeqList(MySeqList&mySeqList)

{

 

 for(inti=0;icount;++i) //输出线性表的元素值

 {

  cout<<"学期:

"<element[i].term<<",班级名:

"<element[i].class_name   ;

  cout<<"学号:

"<element[i].id<<",姓名:

"<element[i].name<<",性别:

"<element[i].sex;

  cout<<"语文:

"<element[i].chinese<<",英语:

"<element[i].english<<",数学:

"<element[i].maths;

  cout<

 }

 cout<

}

//根据学生id,输出线性表的元素值

voidprintSeqListById(MySeqList&mySeqList,intid)

{

 

 for(inti=0;icount;++i) //输出线性表的元素值

 {

  if(id==mySeqList->element[i].id)

  {

    cout<<"学期:

"<element[i].term<<",班级名:

"<element[i].class_name;

    cout<<"学号:

"<element[i].id<<",姓名:

"<element[i].name<<",性别:

"<element[i].sex;

    cout<<"语文:

"<element[i].chinese<<",英语:

"<element[i].english<<",数学:

"<element[i].maths;

    cout<

    break;

  }

 }

 

}

intmain(intargc,char*argv[])

{

/*

 MySeqListmySeqList=initSeqList(20);//初始化一个长20的表

 for(inti=0;i<20;++i)          //对表进行赋值

 {

 mySeqList->count++;                  //对表进行赋值

 mySeqList->element[i]=i;           //对表进行赋值

 }

*/

MySeqListmySeqList=initSeqList(20);//初始化一个长20的表

L:

  system("cls");

  cout<<"*********************学生成绩管理系统*****************"<

  cout<<"***************1.添加学生信息2.查找学生信息**********"<

  cout<<"***************3.删除学生信息4.修改学生信息**********"<

  cout<<"***************5.退出学生系统              **********"<

  inti;  

  cout<<"请选择一个操作(1-5):

";

  cin>>i;

  if(i==1)

  {   

    mySeqList->count=1;

  intiRc=0;

  while(true&&mySeqList->count<20)

  {   

      cout<

"<

   cout<<"classname:

";   

   

   cin>>mySeqList->element[iRc].class_name;

         if(strcmp(mySeqList->element[iRc].class_name,"*")==0)

   { 

    mySeqList->count--;    //此处要减1,请思考为什么要减1哦。

    gotoL;

   }

          

      cout<<"term:

";

   cin>>mySeqList->element[iRc].term;

   cout<<"学号:

";

   cin>>mySeqList->element[iRc].id;

   cout<<"name:

";

   cin>>mySeqList->element[iRc].name;

      cout<<"sex:

";

   cin>>mySeqList->element[iRc].sex;

      cout<<"english:

";

   cin>>mySeqList->element[iRc].english;

   

       cout<<"chinese:

";

   cin>>mySeqList->element[iRc].chinese;

       cout<<"maths:

";

   cin>>mySeqList->element[iRc].maths;  

         

   cout<<"添加学生成绩信息成绩ok."<

         printSeqList(mySeqList);

         mySeqList->count++;

         iRc++;

  }

        

  }

  elseif(i==2)

  {

L4:

      cout<<"请输入要查找的学生ID:

"<

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1