报告软件工程课程设计实验报告-学生信息管理系统.doc 联系客服

发布时间 : 星期一 文章报告软件工程课程设计实验报告-学生信息管理系统.doc更新完毕开始阅读

专业课件 *************************Menu********************************\\n\ gotoxy(7,9);

cprintf(\ *3 search record 0 quit system*\\n\ gotoxy(7,10); cprintf(\

*************************************************************\\n\ /*cprintf()送格式化输出至文本窗口屏幕中*/ }

void printheader() /*格式化输出表头*/ {

printf(HEADER1); printf(HEADER2); printf(HEADER3); }

void printdata(Node *pp) /*格式化输出表中数据*/ {

Node* p; p=pp;

printf(FORMAT,DATA); }

void Wrong() /*输出按键错误信息*/ {

printf(\has wrong! press any key to continue**********\\n\ getchar(); }

void Nofind() /*输出未查找此学生的信息*/ {

printf(\}

void Disp(Link l) /*显示单链表l中存储的学生记录,内容为student结构中定义的数据项*/ {

Node *p;

p=l->next; /*l存储的是单链表中头结点的指针,该头结点没有存储学生信息,指针域指向的后继结点才有学生信息*/

if(!p) {

课件

专业课件 printf(\ getchar(); return; }

printf(\

printheader(); /*输出表格头部*/

while(p) /*逐条输出链表中存储的学生信息*/ {

printdata(p);

p=p->next; /*移动至下一个结点*/ printf(HEADER3); }

getchar(); }

Node* Locate(Link l,char findmess[],char nameornum[]) /*用于定位链表中符合要求的节点,并返回指向该节点的指针,findmess[]保存要查找的具体内容; nameornum[]保存按什么查找;在单链表l中查找;*/ {

Node *r;

if(strcmp(nameornum,\按学号查询*/ {

r=l->next; while(r) {

if(strcmp(r->data.num,findmess)==0) /*若找到findmess值的学号*/ return r; r=r->next; } }

else if(strcmp(nameornum,\ /*按姓名查询*/ {

r=l->next; while(r) {

if(strcmp(r->data.name,findmess)==0) /*若找到findmess值的学生姓名*/ return r; r=r->next; } }

return 0; }

课件

专业课件

void stringinput(char *t,int lens,char *notice) /*输入字符串,并进行长度验证(长度

char n[255]; do{

printf(notice); /*显示提示信息*/ scanf(\ /*输入字符串*/

if(strlen(n)>lens)printf(\进行长度校验,超过lens值重新输入*/

}while(strlen(n)>lens);

strcpy(t,n); /*将输入的字符串拷贝到字符串t中*/ }

int numberinput(char *notice) /*输入分数,0<=分数<=100)*/ {

int t=0; do{

printf(notice); /*显示提示信息*/ scanf(\ /*输入分数*/

if(t>100 || t<0) printf(\进行分数校验*/ }while(t>100 || t<0); return t; }

void Add(Link l) /*增加学生记录*/ {

Node *p,*r,*s; /*实现添加操作的临时的结构体指针变量*/ char ch,flag=0,num[10]; r=l;

s=l->next; system(\

Disp(l); /*先打印出已有的学生信息*/ while(r->next!=NULL)

r=r->next; /*将指针移至于链表最末尾,准备添加记录*/

while(1) /*一次可输入多条记录,直至输入学号为0的记录结点添加操作*/ {

while(1) /*输入学号,保证该学号没有被使用,若输入学号为0,则退出添加记录操作*/ {

stringinput(num,10,\number(press '0'return menu):\/*格式化输入学号并检验*/

flag=0;

if(strcmp(num,\输入为0,则退出添加操作,返回主界面*/ {return;}

课件

专业课件 s=l->next;

while(s) /*查询该学号是否已经存在,若存在则要求重新输入一个未被占用的学号*/

{

if(strcmp(s->data.num,num)==0) {

flag=1; break; }

s=s->next; }

if(flag==1) /*提示用户是否重新输入*/ {

getchar();

printf(\ scanf(\ if(ch=='y'||ch=='Y') continue; else

return; } else

{break;} }

p=(Node *)malloc(sizeof(Node)); if(!p) {

printf(\如没有申请到,打印提示信息*/ return ; }

strcpy(p->data.num,num); /*将字符串num拷贝到p->data.num中*/ stringinput(p->data.name,15,\

p->data.cgrade=numberinput(\输入并检验分数,分数必须在0-100之间*/

p->data.mgrade=numberinput(\ p->data.egrade=numberinput(\

p->data.total=p->data.egrade + p->data.cgrade + p->data.mgrade; /*计算总分*/ p->data.ave=(float)(p->data.total/3); /*计算平均分*/ p->data.mingci=0;

p->next=NULL; /*表明这是链表的尾部结点*/ r->next=p; /*将新建的结点加入链表尾部中*/ r=p;

saveflag=1; /*在main()有对该全局变量的判断,若为1,则进行存盘操作*/

课件