发布时间 : 星期一 文章报告软件工程课程设计实验报告-学生信息管理系统.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,则进行存盘操作*/ 课件