第一篇:C语言课程设计报告——教务管理系统
功能说明:实现两种权限的身份登陆的教务管理系统 */ #include “stdio.h” #include “stdlib.h” #include “string.h” #include “time.h” #include “memory.h” #define share “d:share.dat”
//定义邮件地址
#define manager “d:manager.dat”
#define outmsg
“d:outmsg.dat” //定义管理员邮件地址
//定义公告邮件地址 //定义用户登录时间信息 //定义学生起始文件信息
//定义学生成绩信息地址 #define logtimemsg “d:used login time.dat” #define star_stu
“d:stu_scname.dat”
#define stu_msg
#define mass_key “3110008758” typedef struct student stu;#define sc_num 4
#define uint unsigned int
“d:stu.dat”
//定义文件头部密码
//只设定4门科目,不允许改动
/*学生成绩管理系统结构*/ struct student {
char num[10];/*学生学号*/ char name[10];/*学生姓名*/ uint score[sc_num];/*科目分数*/ uint average;/*科目平均分*/ stu *next;
}st;char gettemp=0;/*管理员身份识别结构*/ typedef struct username user;struct username { char username[20];// char password[20];}use;/*时间登录信息*/ struct Logtime { char userlogin[20];struct tm;};char logc;//登录次数
typedef struct Logtime logtime;//============ //定义通讯协议
//============
#define mass_max 200 struct Massage {
//定义信息量
int cont;
//文件数量 char username[15];//发送人
char mass[mass_max];//信息 }mas;typedef struct Massage massage;
//============ //============ char userlogin[10];char sc_name[sc_num][10];/*以上是学生信息*/
char welcome(void);/*用户界面,返回0,则表示退出系统*/ /* ====================== 学生信息操作
====================== */ stu*creat();/*建立链表*/ void display(stu *head);/*显示用户信息*/ void insert(stu *head);/*增加学生信息*/ stu* delname(stu*head,char *stu_name);/*根据学生姓名删除用户信息*/ stu* delnum(stu *head,char *stu_num);/*根据学生学号删除用户信息*/ stu* checkname(stu *head,char *stu_name);/*输出指定学生的信息*/ stu* checknum(stu *head,char *stu_num);/*输出指定学生学号的学生信息*/ void changsc_name(stu *head,char *name);/*修改用户成绩*/ void changsc_num(stu *head,char *num);/*修改用户成绩*/ void waring(void);/*产生警告信息*/ char cheknum(char *num);/*检查学生学号是否符合格式*/ char chekname(char *name);/*检查学生姓名是否符合格式*/ char chekscore(char score);/*检查学生分数是否符合格式*/ stu* sortscore(stu *head);/*学生按平均成绩排序*/ stu* sortnum(stu *head);/*学生信息按学号排序*/ /* ====================== 学生用户登录
====================== */ char stulogin(void);/*进入普通用户登录界面*/ char stucheck(char *nam,char *stnum);/*查找是否存在该学生信息*/ char newlogin(char *nam,char *stnum);/*注册学生信息*/ void disnewst(void);/*获得学生信息*/ /* ====================== 系统管理选择,管理员权限
====================== */ void stu_system(void);/*对各种操作集中管理*/ void sentmsg(void);/*发送公告*/ char readmsg(void);/*浏览信息*/ char delemsg(void);//删除信息
void chagesbject(void);/*修改课程信息*/ /* ====================== 用户登录信息
====================== */ void setlogintime(void);/*记录用户登录时间*/ void dislogintime(void);/*显示用户登录信息*/ void setused(void);/*注册新用户资料*/ char usedcheckname(char *name);/*用户信息检查,若存在用户,则返回1,否则返回0*/ char usedcheckpass(char *name,char *password);/*查看用户名密码是否符合*/ /* ====================== 存储操作
====================== */ char save(stu *head);/*保存用户数据*/ char disload();/*显示用户信息*/ stu* load(void);/*加载用户数据*/ void clrtxt(char *str);/*清除文本信息*/ char* creat_txt(char *username);/*根据用户名,创建一个用户文件*/ FILE* chekuser(char *username);/*根据用户名,查找是否有此用户信息,若无,返回NULL*/ /* ======================---------------main函数----------====================== */ void main(){
FILE *fp;char i,j;char name[15];system(“color b5”);memset(name,' ',sizeof(name));if((fp=fopen(star_stu ,“r+”))==NULL){ printf(“将新建文件!n”);} fp=fopen(star_stu ,“w+”);fread(name,sizeof(name),1,fp);if(strcmp(name,mass_key)!=0){
printf(“文件载入出错!t N为退出 回车键继续...:”);i=getchar();if((i=='n')||(i=='N')){
} else { fclose(fp);exit(1);
} else {
} printf(“nn数据将重新初始化!n”);printf(“nn请输入4门科目名称n”);memset(name,' ',sizeof(name));fwrite(name,sizeof(name),5,fp);strcpy(name,mass_key);rewind(fp);fwrite(name,sizeof(name),1,fp);for(i=0;i } printf(“nn第%d门科目名称 : ”,i+1);scanf(“%s”,sc_name[i]); if(fwrite(sc_name[i],sizeof(sc_name[i]),1,fp)!=1){ } printf(“nntttt保存出错!n”);getchar();exit(1); if(fp==NULL)printf(“n文件错误!”);fscanf(fp,“%s%s%s%s”,sc_name[0],sc_name[1],sc_name[2],sc_name[3]);} fclose(fp);fp=fopen(share,“w”);fclose(fp);fp=fopen(manager,“w”);fclose(fp);fp=fopen(outmsg,“w”);fclose(fp);do { j=welcome();if(j==1){ system(“cls”);printf(“tt欢迎进入学生用户中心系统!”);setlogintime(); //为防止文件在后面打开错误 j=stulogin();} else if(j==2) { setlogintime();stu_system();} }while(j!=0); //为防止文件未关闭,倒置文件内容 fp=fopen(share,“w”);丢失 } fclose(fp);fp=fopen(manager,“w”);fclose(fp);fp=fopen(outmsg,“w”);fclose(fp);fp=fopen(logtimemsg,“w”);fclose(fp);fp=fopen(star_stu,“w”);fclose(fp);fp=fopen(stu_msg,“w”);fclose(fp);/* ======================---------------------------初始化用户界面---------------------------====================== */ //返回1,则进入stu用户界面 //返回0,则表示退出 //返回2,则表示进入管理员界面 char welcome(void){ char username[20]; char userpass[20];char i,wrong_cont=0,key=0,weling=1,back=0;char temp;system(“color b5”);while(weling){ do{ system(“cls”);printf(“t*********************欢迎进入教务管理系统********************n”);printf(“t* *n”);printf(“t* 1.用户登录 *n”);printf(“t* *n”);printf(“t* 2.用户注册 *n”);printf(“t* *n”); printf(“t* 3.管理员登陆 *n”);printf(“t* *n”);printf(“t* 4.管理员注册 *n”);printf(“t* *n”);printf(“t* 5.退出系统 *n”);printf(“t* *n”);printf(“t===============n”);printf(“t 请按命令提示操作n”);printf(“nnn”);printf(“nnn”);printf(“您输入的命令为:t”);i=getchar();if((i!='1')&&(i!='2')&&(i!='3')&&(i!='4')&&(i!='5')){ printf(“n输入错误的指令!请按命令提示操作 1-3n”);getchar();} }while((i!='1')&&(i!='2')&&(i!='3')&&(i!='4')&&(i!='5'));switch(i){ case '1': { system(“cls”);memset(username,' ',sizeof(username));memset(userpass,' ',sizeof(userpass));printf(“nt请输入用户名 :t”);scanf(“%s”,username);printf(“nt请输入学号 :t”);scanf(“%s”,userpass);temp=stucheck(username,userpass);if(temp==0){ } { } printf(“没有学生档案信息!请注册...n”);getchar();break;else if(temp==1)memset(userlogin,' ',sizeof(userlogin));strcpy(userlogin,username); printf(“nt学生成绩登录有效!”);getchar();return 1; getchar();//======================= break;} case '2': { } system(“cls”);memset(username,' ',sizeof(username));memset(userpass,' ',sizeof(userpass));printf(“nt请输入用户名 :t”);scanf(“%s”,username);printf(“nt请输入学号 :t”);scanf(“%s”,userpass);while(cheknum(userpass)!=1){ printf(“您的输入格式有误,请重新输入!n”);printf(“按回车键继续...n”);getchar();memset(userpass,' ',sizeof(userpass));printf(“nt请输入学号 :t”);scanf(“%s”,userpass);} if(newlogin(username,userpass))printf(“nt注册成功!用户名:%st学号:%s”,username,userpass);getchar();break;case '3': { do { system(“cls”);memset(username,' ',sizeof(username));memset(userpass,' ',sizeof(userpass));printf(“nt请输入用户名 :t”);scanf(“%s”,username);printf(“nt请输入密码 :t”);scanf(“%s”,userpass);if(usedcheckpass(username,userpass)==0){ wrong_cont++;if(wrong_cont==3){ printf(“nt输入次数大于3次!请按回车键退出系统!n”); getchar();weling=0;return 0;} key=1;printf(“nt按1选择返回主菜单nt按0继续输入用户验证码n”);do { back=getchar(); if((back!='1')&&(back!='0')){ } printf(“nt输入错误!按回车键继续...”);getchar();}while((back!='1')&&(back!='0'));if(back=='1')key=0;} else { key=0;weling =0;system(“cls”);printf(“nntt欢迎%s进入学生管理系统n”,username);memset(userlogin,' ',sizeof(userlogin));strcpy(userlogin,username); //记录用户 登录信息 return 2;} }while(key);back=0;weling=1;break;return 2;} case '4': { } setused();/*注册新管理员资料*/ weling=1;break;case '5': { weling=0; } /* return 0;} } } return 1;======================---------------建立链表----------====================== */ stu*creat()/*建立链表*/ { char i,j;char stu_num;stu *p1, *p2;stu *head;FILE *fp;fp=fopen(stu_msg,“w+”);head=(stu*)malloc(sizeof(stu));head->next=NULL;p1=p2=(stu*)malloc(sizeof(stu));i=0,j=0;system(“cls”);printf(“nn请输入要录入的学生人数: ”);scanf(“%d”,&stu_num);for(i=0;i system(“cls”);p1->average=0;printf(“nn请输入学生学号: ”);scanf(“%s”,p1->num);while(!cheknum(p1->num)){ printf(“nn输入格式错误!请重新输入学号 : ”);scanf(“%s”,p1->num);} printf(“nn请输入学生姓名 : ”);scanf(“%s”,p1->name);while(!chekname(p1->name)){ printf(“nn输入格式出错!不能带数字或下划线!n”); printf(“nn请重新输入学生姓名: ”);scanf(“%s”,p1->name);} do { printf(“nn请输入学生%s成绩 :”,sc_name[j]); scanf(“%d”,&p1->score[j]); while((100 score[j])||(p1->score[j]<0)) { printf(“nn成绩格式出错!n ”);getchar();printf(“nn请重新输入学生成绩 : ”);scanf(“%d”,&p1->score[j]); } p1->average+=p1->score[j];j++;}while(j /*分清楚是head->next=p还是 { head->next=p1;head=p*/ p2=p1; } } p1->next=NULL;} else { p2->next=p1;p2=p1;p2->next=NULL; /*产生新的节点*/ } fwrite(p1,sizeof(stu),1,fp);p1=(stu*)malloc(sizeof(stu));display(head);getchar();fclose(fp);return head;/* ====================== 检查学生学号是否符合格式,若正确,则返回1,否则返回0 ====================== */ char cheknum(char *num)/*检查学生学号是否符合格式*/ { char i; /*获取字符串长度*/ } char j=strlen(num);for(i=0;i } if(('0'>num[i])||('9' } /* ====================== 显示学生成绩情况 ====================== */ void display(stu *head)/*显示用户信息*/ { for(i=0;i } /*if(('A'>name[i])||(('Z' while(p1!=NULL) { if(i==0) { printf(“姓名t学号t %st %st %st%st 平均n”,sc_name[0],sc_name[1],sc_name[2],sc_name[3]); i++; } printf(“%st%st %dt %dt%dt%dt%dn”,p1->name,p1->num,p1->score[0],p1->score[1],p1->score[2],p1->score[3],p1->average); p1=p1->next; } getchar();} else { printf(“ttt链表为空!nnn请按回车键继续...n”); getchar();} } /* ====================== 插入学生信息 ====================== */ void insert(stu *head)/*增加学生信息*/ { stu *p1,*p2;char j=0;p1=head->next;p2=(stu*)malloc(sizeof(stu));/*创建新的学生信息*/ p2->average=0; system(“cls”); printf(“nn请输入要增加的学生学号: ”); scanf(“%s”,p2->num); while(!cheknum(p2->num)){ 分 printf(“nn输入格式错误!请重新输入学号 : ”);scanf(“%s”,p2->num);} printf(“nn请输入学生的姓名 : ”);scanf(“%s”,p2->name);while(!chekname(p2->name)){ } do { printf(“nn请输入学生%s成绩 :”,sc_name[j]); scanf(“%d”,&p2->score[j]);while((100 score[j])||(p2->score[j]<0)) { printf(“nn成绩格式出错!n ”);getchar();printf(“nn请重新输入学生成绩 : ”);scanf(“%d”,&p2->score[j]);printf(“nn输入格式出错!不能带数字或下划线!n”);printf(“nn请重新输入学生姓名: ”);scanf(“%s”,p2->name);} p2->average+=p2->score[j];j++;}while(j } else { } while(p1->next!=NULL)p1=p1->next;p1->next=p2;p2->next=NULL;printf(“n原链表为空!”);getchar();head->next=p2;display(head);getchar();} /* ====================== 删除学生信息 ====================== */ stu* delname(stu*head,char *stu_name)/*根据学生姓名删除用户信息*/ { stu *p1,*p2;char i,j=0;system(“cls”);if(head->next==NULL){ printf(“nn没有学生信息!t操作错误!n”);return head;} p1=head->next;p2=p1;while(p1!=NULL){ if(strcmp(p1->name,stu_name)==0){ printf(“nn你所删除的学生姓名为: %st学号为:%sn”,p1->name,p1->num);printf(“nn确定为:y,取消为nt:”);i=getchar(); while(!((i=='y')||(i=='Y')||(i=='n')||(i=='N'))){ printf(“nn输入错误!t请重新输入 :”);} i=getchar();if((i=='y')||(i=='Y')){ if(j==0) } { } else { } printf(“nntttt成功删除用户信息!nnttt按回车键继续...n”);free(p1);return head;p2->next=p1->next;head->next=p1->next;/*删除头部接点*/ else { return head; } } } j++;p2=p1;p1=p1->next;} printf(“nntt没有此用户记录信息!n按回车键继续n”);getchar();system(“cls”);display(head);getchar();return head;/* ====================== 删除学生信息(以学号为对象)====================== */ stu* delnum(stu *head,char *stu_num)/*根据学生学号删除用户信息*/ { stu *p1,*p2;char i,j=0;system(“cls”);if(head->next==NULL){ printf(“nntt没有存储学生信息!nntt操作错误!n”);return head;} p1=head->next;p2=p1;while(p1->next!=NULL){ if(strcmp(p1->num,stu_num)==0){ printf(“nn你所删除的学生姓名为: %st学号为:%sn”,p1->name,p1->num);printf(“nn确定为:y,取消为nt:”);i=getchar(); { } while(!((i=='y')||(i=='Y')||(i=='n')||(i=='N')))printf(“nn输入错误!t请重新输入 :”);i=getchar(); } } if((i=='y')||(i=='Y')){ } if(j==0){ head->next=p1->next;} else { } printf(“nntttt成功删除用户信息!nnttt按回车键继续...n”);free(p1);return head;p2->next=p1->next;else return head;} p2=p1;p1=p1->next;j++;printf(“nn没有此用户信息!n按回车键继续...n”);getchar();system(“cls”);display(head);getchar();return head;/* ====================== 输出指定学生信息(以学生姓名为对象)====================== */ stu* checkname(stu *head,char *stu_name)/*输出指定学生的信息*/ { stu *p1;system(“cls”);if(head==NULL){ printf(“nntt没有存储学生信息!t操作错误!n”);getchar();return head; } } p1=head;while(p1->next!=NULL){ if(strcmp(p1->name,stu_name)==0) { printf(“nn你所查找的学生信息如下n”);printf(“ nn%st学号为:%sn”,p1->name,p1->num);printf(“姓名t学号tt %st %st %st%st平均分 n”, sc_name[0],sc_name[1],sc_name[2],sc_name[3]);printf(“%st%stt %dt %dt%dt%dt%dn”,p1->name,p1->num,p1->score[0],p1->score[1],p1->score[2],p1->score[3],p1->average); } getchar();return p1;} p1=p1->next;printf(“nntt找不到相关用户信息!n按回车键继续...n”);getchar();system(“cls”);display(head);getchar();return(stu*)NULL;/* ====================== 输出指定学生信息(以学生学号为对象)====================== */ stu* checknum(stu *head,char *stu_num)/*输出指定学生学号的学生信息*/ { stu *p1,*p2;p2=(stu*)malloc(sizeof(stu));system(“cls”);if(head==NULL){ printf(“nntt没有存储学生信息!t操作错误!n”);return head;} p1=head; } while(p1->next!=NULL){ p1->name,p1->num,p1->score[0],p1->score[1],p1->score[2],p1->score[3],p1->average); getchar();return p1;if(strcmp(p1->num,stu_num)==0){ printf(“nn你所查找的学生信息如下n”);printf(“ %st学号为:%sn”,p1->name,p1->num);printf(“姓名t学号tt %st %st %st%st平均分 n”, sc_name[0],sc_name[1],sc_name[2],sc_name[3]);printf(“%st%stt %dt %dt%dt%dt%dn”, } p1=p1->next;} printf(“nntt找不到相关用户信息!n按回车键继续...n”);getchar();return(stu*)NULL;/* ====================== 修改指定学生信息(以学生姓名为对象)====================== */ void changsc_name(stu *head,char *name)/*修改用户成绩*/ { stu *p; char j=0;system(“cls”);p=checkname(head,name);if(p!=NULL){ p->average=0;printf(“nn请输入学生新的学号: ”);scanf(“%s”,p->num);while(!cheknum(p->num)){ printf(“nn输入格式错误!请重新输入学号 :n ”);scanf(“%s”,p->num);} do } { printf(“nn请输入学生成绩%s :”,sc_name[j]); scanf(“%d”,&p->score[j]);while((100 score[j])||(p->score[j]<0)) { j++; } printf(“nn成绩格式出错!n ”);getchar();printf(“nn请重新输入学生成绩 : ”);scanf(“%d”,&p->score[j]); p->average+=p->score[j]; }while(j p->average=p->average/4; printf(“nntt用户数据更新完毕!n请按回车键退出...n”); getchar();system(“cls”);display(head); getchar();} /* ====================== 修改指定学生信息(以学生学号为对象)====================== */ void changsc_num(stu *head,char *num)/*修改用户成绩*/ { stu *p2;char j=0;system(“cls”);p2=checknum(head,num);if(p2!=NULL){ p2->average=0;printf(“nn请输入学生姓名: ”);scanf(“%s”,p2->name);while(!chekname(p2->name)){ printf(“nn输入格式错误!请重新输入学号 : ”);scanf(“%s”,p2->name);} do { } printf(“nn请输入学生成绩%s :”,sc_name[j]); scanf(“%d”,&p2->score[j]);while((100 score[j])||(p2->score[j]<0)) { printf(“nn成绩格式出错!n ”); j++; } getchar();printf(“nn请重新输入学生成绩 : ”);scanf(“%d”,&p2->score[j]); p2->average+=p2->score[j]; }while(j p2->average=p2->average/4; printf(“nntt用户数据更新完毕!请按回车键退出...n”); getchar();} /* ====================== ====================== ============================存储操作类函数========================== ====================== ====================== */ /* ====================== 加载学生信息 ====================== */ stu* load(void)/*加载用户数据*/ { FILE *fp;stu *p,*head,*p1;char i=0,j=0;fp=fopen(stu_msg,“r”);rewind(fp);head=(stu*)malloc(sizeof(stu));p1=p=(stu *)malloc(sizeof(stu));while(fread(p,sizeof(stu),1,fp)==1){ if(i==0){ head->next=p;p1=p; } } } else { p1->next=p;p1=p;p1->next=NULL;} i++;p=(stu*)malloc(sizeof(stu));j++;if(j==0){ printf(“nnttt没有数据信息可载入!n”);head=NULL;free(p);getchar();} fclose(fp);return head;/* ====================== 显示学生信息 ====================== */ char disload()/*显示用户信息*/ { FILE *fp;stu *p1;char i=0;p1=(stu*)malloc(sizeof(stu));if((fp=fopen(stu_msg,“r+”))==NULL)fp=fopen(stu_msg,“w+”);rewind(fp);while(fread(p1,sizeof(stu),1,fp)==1){ printf(“%st%st %dt %dt%dt%dt%dn”,p1->name,p1->num,p1->score[0],p1->score[1],p1->score[2],p1->score[3],p1->average); i++; //fread(p1,sizeof(stu),1,fp);} fclose(fp);if(i==0) } /* { printf(“nttt文件中不含学生信息!nttt按回车键继续...n”);getchar();} else { } printf(“nttt一共记录了%d名学生信息!nttt按回车键继续...n”,i);getchar();====================== 保存学生信息 ====================== */ char save(stu *head)/*保存用户数据*/ { stu *p;FILE *fp;stu stt;char i=0;p=head->next;system(“cls”);clrtxt(stu_msg);fp=fopen(stu_msg,“w”);rewind(fp);// if(head->next!=NULL){ while(p!=NULL) { fwrite(p,sizeof(stu),1,fp);p=p->next;i++;} if(i==0){ } else { printf(“没有保存数据!n”);getchar();fclose(fp);return 0; } fclose(fp);return 1;} } else { } fclose(fp);return 0; fclose(fp);return 0;/* ====================== 创建文本信息 ====================== */ char* creat_txt(char *username)/*根据用户名,创建一个用户文件*/ { char name[20];FILE *fp;strcpy(name,“d:”);strcat(name,username);strcat(name,“.txt”);fp=fopen(name,“w+”);system(“cls”);if(fp!=NULL){ } else { } printf(“nntt无法创建用户文件!nntt请按回车键继续...n”);getchar();fclose(fp);return name;//printf(“nn文件路径为:%snn”,name);//printf(“nntt用户文件创建成功!nntt请按回车键继续...n”);//getchar();fclose(fp);return name;} /* ====================== 清除文本信息 ====================== */ FILE* chekuser(char *username)/*根据用户名,查找是否有此用户信息,若无,返回NULL*/ { } /* ====================== 清除文本信息 ====================== */ void clrtxt(char *str)/*清除文本信息*/ { char clrmem[10];char semem[40];FILE *fp;int i=0,j=0;if((fp=fopen(str,“r”))==NULL){ printf(“nt无此文件!”);getchar();} else { fclose(fp);fp=fopen(str,“w”);memset(clrmem,' ',sizeof(clrmem));rewind(fp);for(i=0;i<40;i++){ if(fwrite(clrmem,sizeof(clrmem),1,fp)!=1){ if(j==0){ printf(“nntt文件清除失败!nntt请按回车键继续...n”);getchar();break;} else { //printf(“nntt文件清除成功!nntt请按回车键继续...n”);//getchar();break; } /* } } } else j++;} fclose(fp);====================== 用户登录信息 ====================== */ void setlogintime(void)/*记录用户登录时间*/ { FILE *fp;int y,m,d,hour,min,sec;time_t T; struct tm *timeinfo; // 一个可以包含时间信息的长整型 // 得到机器的日历时间 time(&T); if((fp=fopen(logtimemsg,“a+”))==NULL){ fp=fopen(logtimemsg,“w”);} time(&T); // 得到机器的日历时间 timeinfo = localtime(&T);时间格式的指针 } /* // 将日历时间转换为当地时间,timeinfo 是一个// 年份 // 月份 // 日期 y=timeinfo->tm_year + 1900;m=timeinfo->tm_mon + 1;d=timeinfo->tm_mday; hour=timeinfo->tm_hour;min=timeinfo->tm_min;sec=timeinfo->tm_sec;fwrite(userlogin,sizeof(userlogin),1,fp);fwrite(timeinfo,sizeof(struct tm),1,fp);//写入用户登陆信息 printf(“nnntt登陆时间为:ntt%d年 %d月 %d日 %d时 %d分 %d秒nnn”, y, m, fclose(fp);d,hour,min,sec);====================== 用户登录信息 ====================== */ void dislogintime(void)/*显示用户登录信息*/ { FILE *fp;int y,m,d,hour,min,sec; struct tm *timeinfo;char name[10];int i=0;timeinfo=(struct tm*)malloc(sizeof(struct tm));fp=fopen(logtimemsg,“r+”);if(fp==NULL){ } else { memset(name,' ',sizeof(name));while(fread(name,sizeof(name),1,fp)==1){ fread(timeinfo,sizeof(struct tm),1,fp);y=timeinfo->tm_year + 1900;m=timeinfo->tm_mon + 1;d=timeinfo->tm_mday; hour=timeinfo->tm_hour;min=timeinfo->tm_min;sec=timeinfo->tm_sec; // 年份ins // 月份 // 日期 printf(“nntt找不到文件信息!nntt按回车键继续...n”);getchar();i++;printf(“nt第%d次登陆时间为:%d年 %d月 %d日 %d时 %d分 %d秒t%s用户登录”,i,y, m, d,hour,min,sec,name); } memset(name,' ',sizeof(name));} if(i==0)printf(“n没有记录用户登录时间!n”);getchar();free(timeinfo);fclose(fp);} /* ====================== 用户登录信息 ====================== */ void setused(void)/*注册新用户资料*/ { FILE *fp;char chekpassword[20];char lgway[20];char i=0;system(“cls”);memset(use.password,' ',sizeof(use.password));memset(chekpassword,' ',sizeof(chekpassword));memset(use.username,' ',sizeof(use.username));do{ printf(“nn请输入用户名:t”);scanf(“%s”,use.username);printf(“nn请输入用户密码:t”);scanf(“%s”,use.password);printf(“nn请再次输入密码:t”);scanf(“%s”,chekpassword);if(strcmp(use.password,chekpassword)!=0){ printf(“nntt密码不匹配!n按回车键继续n”);getchar();i=1;memset(use.password,' ',sizeof(use.password));memset(chekpassword,' ',sizeof(chekpassword));memset(use.username,' ',sizeof(use.username)); //10检查用户密码输入 } else i=0;} while(i);strcpy(lgway,creat_txt(use.username));clrtxt(lgway);fp=fopen(lgway,“w+”);if(fp!=NULL){ rewind(fp);/*清除文本信息*/ if(fwrite(&use,sizeof(use),1,fp)==1){ rewind(fp);memset(use.username,' ',sizeof(use.username));memset(use.password,' ',sizeof(use.password));fscanf(fp,“%s%s”,use.username,use.password);/////////////////////////////////此处写有问题! //fread(&use,sizeof(use),1,fp); //printf(“您保存的用户名为:%sn”,use.username); } /* } else { } else { //printf(“您保存的密码是:%sn”,use.password);//printf(“nntt数据保存成功!n按回车键继续...n”);//getchar();fclose(fp);printf(“n数据保存失败!n按回车键继续...n”);getchar();fclose(fp);} printf(“n用户注册失败!n按回车键继续...n”);getchar();fclose(fp);} fclose(fp);====================== 用户登录信息 ====================== */ char usedcheckname(char *username)/*用户信息检查*/ { char name[20];FILE *fp;system(“color b5”);strcpy(name,“d:”);strcat(name,username);strcat(name,“.txt”);fp=fopen(name,“r+”);rewind(fp);if(fp!=NULL){ } else { printf(“nntt用户名输入错误!nntt请按回车键继续...n”);getchar();fclose(fp);return 1; return 0;} } /* ====================== 检查输入密码是否正确 ====================== */ char usedcheckpass(char *user,char *pass)/*查看用户名密码是否符合*/ { char filename[20];FILE *fp;memset(filename,' ',sizeof(filename));strcpy(filename,“d:”);strcat(filename,user);strcat(filename,“.txt”);if((fp=fopen(filename,“r”))==NULL){ printf(“n操作错误!不存在此用户!n”);getchar();return 0;} //printf(“n文件名为:%sn”,filename);getchar();memset(use.username,' ',sizeof(use.username));memset(use.password,' ',sizeof(use.password));if(fp==NULL){ printf(“nntt用户名错误!nntt请按回车键继续...n”);getchar();fclose(fp);return 0;} rewind(fp);fread(&use,sizeof(use),1,fp);//printf(“用户名:%st密码:%sn”,use.username,use.password);//getchar();if(strcmp(use.password,pass)==0){ system(“cls”);printf(“nntt密码输入正确!nntt请按回车键继续...n”);getchar();fclose(fp);return 1; } /* } else { printf(“nntt密码输入错误!nntt请按回车键继续...n”);getchar(); } fclose(fp);return 0;====================== 系统管理选择 ====================== */ void stu_system(void)/*对各种操作集中管理*/ { FILE *fp;stu *head,*temp_str;char menue[8],reg[8],temp[10];char key=0,i=0,quet=0,insert_num;char str3[10];char loginout=0;system(“color b4”);head=load();do { quet=0;loginout=0;system(“color b5”); getchar();while(head==NULL){ } while(!quet){ do{ system(“cls”);printf(“tt学生成绩管理系统ttt管理员%s登录n”,userlogin);printf(“t==============n”);printf(“t||tt0.修改课程信息n”);system(“cls”);printf(“数表为空,请至少输入一个学生信息!n”);head=creat(); printf(“t||n”);printf(“t||tt1.查看学生信息tt2.增加学生信息n”);printf(“t||n”);printf(“t||tt3.删除学生信息tt4.修改学生信息n”);printf(“t||n”);printf(“t||tt5.查找学生信息tt6.广播信息管理n”);printf(“t||n”);printf(“t||tt7.历史登录信息tt8.注销用户信息n”);printf(“t||n”);printf(“t||tt9.整理学生信息tta.退出系统n”);printf(“t==============n”);printf(“tttttt请按命令操作n”);printf(“您输入的命令是:t”);i=getchar();if(!((i>='0')||(i<='9')))printf(“n输入不合法!请继续按命令操作!1-8n”);}while(!((i>='0')||(i<='9')));switch(i){ case '0': { chagesbject();break;} case '1': { } system(“cls”);printf(“姓名t学号t %st %st %st%st平均分 n”, sc_name[0],sc_name[1],sc_name[2],sc_name[3]);disload(head);printf(“nntt按回车键返回...nn”);getchar();break;case '2': { system(“cls”);printf(“n请输入要增加学生的个数:t”);scanf(“%d”,&insert_num);for(temp[2]=0;temp[2] break;} case '3': { do { system(“cls”);display(head);printf(“t==============================”);printf(“nt请输入删除方式:t”);printf(“nt1.以学号方式”);printf(“nt2.以姓名方式”);printf(“nt3.退出”);printf(“nt==============================”);printf(“n”);printf(“您的选择是: t”);temp[3]=getchar();if(!((temp[3]=='1')||(temp[3]=='2')||(temp[3]=='3'))){ printf(“n您的输入格式不正确,请重新输入!n按回车键继续...”);getchar();} }while(!((temp[3]=='1')||(temp[3]=='2')||(temp[3]=='3')));if(temp[3]=='1'){ } else { memset(str3,' ',sizeof(str3));printf(“n请输入您要删除的学生姓名:t”);scanf(“%s”,str3);head=delname(head,str3);system(“cls”);display(head);save(head);getchar();memset(str3,' ',sizeof(str3));printf(“n请输入您要删除的学生学号:t”);scanf(“%s”,str3);head=delnum(head,str3);system(“cls”);display(head);save(head);getchar(); } break;} case '4': { do { system(“cls”);display(head);printf(“==============================”);printf(“nt请输入修改方式:t”);printf(“nt1.以学号方式”);printf(“nt2.以姓名方式”);printf(“nt3.退出”);printf(“n==============================”);printf(“nnnnn”);printf(“您的选择是: t”);temp[4]=getchar();if(!((temp[4]=='1')||(temp[4]=='2')||(temp[4]=='3'))){ printf(“n您的输入格式不正确,请重新输入!n按回车键继续...”);getchar();} }while(!((temp[4]=='1')||(temp[4]=='2')||(temp[4]=='3')));if(temp[4]=='1'){ } memset(str3,' ',sizeof(str3));printf(“n请输入您要修改的学生学号:t”);scanf(“%s”,str3);changsc_num(head,str3);save(head);else if(temp[4]=='2'){ memset(str3,' ',sizeof(str3));printf(“n请输入您要修改的学生姓名:t”);scanf(“%s”,str3);changsc_name(head,str3);save(head);} break;} case '5': { } { do { system(“cls”);printf(“t==============================”);printf(“ntt请输入查找方式:t”);printf(“ntt1.以学号方式”);printf(“ntt2.以姓名方式”);printf(“ntt3.退出”);printf(“tn==============================”);printf(“n”);printf(“您的选择是: t”);temp[5]=getchar();if(!((temp[5]=='1')||(temp[5]=='2')||(temp[5]=='3'))){ printf(“n您的输入格式不正确,请重新输入!n按回车键继续...”);getchar();} }while(!((temp[5]=='1')||(temp[5]=='2')||(temp[5]=='3')));if(temp[5]=='1'){ memset(str3,' ',sizeof(str3));printf(“n请输入您要查找的学生学号:t”);scanf(“%s”,str3);checknum(head,str3);getchar();} else if(temp[5]=='2'){ memset(str3,' ',sizeof(str3));printf(“n请输入您要查找的学生姓名:t”);scanf(“%s”,str3); checkname(head,str3); getchar();} break;case '6': do { system(“cls”);printf(“t==============================”);printf(“nt请输入信息管理操作:n”);printf(“nt1.发布公告n”); } printf(“nt2.删除信息n”);printf(“nt3.查看信息n”);printf(“nt4.退出”);printf(“nt==============================”);printf(“n”);printf(“您的选择是: t”);temp[6]=getchar();if(!((temp[6]>'0')&&(temp[6]<'5'))){ printf(“n您的输入格式不正确,请重新输入!n按回车键继续...”);getchar();} }while(!((temp[6]>'0')&&(temp[6]<'5')));switch(temp[6]){ case '1': { sentmsg();break;} case '2': { } while(delemsg());break;case '3': { } while(readmsg());break;case '4': { } break;//disload();break;} break;case '7': { system(“cls”);dislogintime();getchar(); getchar();break;} case '8': { } case '9': { do { system(“cls”);printf(“t==============================”);printf(“nt请输入信息管理操作:n”);printf(“nt1.学号排序n”);printf(“nt2.平均分信息n”);printf(“nt3.退出”);printf(“nt==============================”);printf(“n”);printf(“您的选择是: t”);temp[9]=getchar();if(!((temp[9]>'0')&&(temp[9]<'4'))){ printf(“n您的输入格式不正确,请重新输入!n按回车键继续...”);getchar();save(head);printf(“nt您将注销用户登录信息!按回车键退出...”);getchar();quet=1;loginout=0;break; //先退出系统,然后进入用户登录界面 } }while(!((temp[9]>'0')&&(temp[9]<'4')));switch(temp[9]){ case '1': { head=sortnum(head);save(head);disload(head);getchar();break;} case '2': { } } } head=sortscore(head);save(head);disload(head);getchar();break;break;case 'a': { } quet=1;loginout=0;do { system(“cls”);printf(“nnt您将退出教务管理系统...n”);printf(“nntY:确认退出ttN:返回n”);printf(“nnn”);printf(“您的选择是:t”);i=getchar();if(!((i=='y')||(i=='Y')||(i=='n')||(i=='N'))){ printf(“n您的输入有误!请按回车键继续...”);getchar();menue[7]=1;} else menue[7]=0;} while(menue[7]);if((i=='N')||(i=='n'))quet=0;break;} } if(quet==1){ } }while(loginout);} /* ====================== 学生用户登录 ====================== */ char stulogin(void)/*进入普通用户登录界面*/ { char temp[6];//定义数据项的变量 int tem[6];char going[6];FILE *fp;massage *msg;//定义信息载体 char key,i,logout=0;while(!logout){ do { system(“cls”);printf(“ %s学生登录n”,userlogin);printf(“t=============================================n”);printf(“tt欢迎进入学生信息中心n”);printf(“n”);printf(“tt1.查看学生信息n”);printf(“n”);printf(“tt2.给管理员留言n”);printf(“n”);printf(“tt3.查看广播n”);printf(“n”);printf(“tt4.发送广播n”);printf(“n”);printf(“tt5.查看公告n”);printf(“n”);printf(“tt6.注销用户n”);printf(“t=============================================n”);printf(“ 请按数字进行菜单选择n”);printf(“n您的选择是:t”);key=getchar();if(!((key>'0')&&(key<'7'))){ } printf(“n您的输入有误,请重新输入!”);printf(“nn请按回车键继续...”);getchar(); //如果不是选择退出 }while(!((key>'0')&&(key<'7')));switch(key){ case '1': { } case '2': { system(“cls”);msg=(massage*)malloc(sizeof(massage)); memset(msg->username,' ',sizeof(msg->username));//清除数组内容 strcpy(msg->username,“学生”);strcpy(msg->username,userlogin); //加载用户名 printf(“n您最大能留言的字数不超过mass_max个英文字符”);printf(“nnt请输入您要留言的信息,按回车键结束:t”);scanf(“%s”,msg->mass);fp=fopen(manager,“a+”);fwrite(msg,sizeof(massage),1,fp);fclose(fp); printf(“n留言成功!按回车键继续...”);getchar();getchar();free(msg); //结束操作 disnewst();getchar();getchar();break; //显示学生信息 break;} case '3': { system(“cls”);msg=(massage*)malloc(sizeof(massage));fp=fopen(share,“r”);memset(msg,' ',sizeof(massage));//清除信息内容 going[5]=1;rewind(fp);while((fread(msg,sizeof(massage),1,fp)!=0)){ printf(“%s用户:t”,msg->username);printf(“%s:nn”,msg->mass); //结束操作 } fclose(fp); printf(“n退出成功!按回车键继续...”); } getchar();getchar();free(msg);break;case '4': { } system(“cls”);msg=(massage*)malloc(sizeof(massage)); memset(msg->username,' ',sizeof(msg->username));//清除数组内容 strcpy(msg->username,“学生”);strcpy(msg->username,userlogin); //加载用户名 system(“cls”);printf(“nt您最大能留言的字数不能超过200个英文字符”);printf(“nn请输入您要留言的信息,按回车键结束:t”);scanf(“%s”,msg->mass);fp=fopen(share,“a+”);fwrite(msg,sizeof(massage),1,fp);fclose(fp); //结束操作 printf(“n信息发送成功!按回车键继续...”);getchar();getchar();free(msg);break;case '5': { system(“cls”);msg=(massage*)malloc(sizeof(massage));fp=fopen(outmsg,“r”);memset(msg,' ',sizeof(massage));//清除信息内容 going[5]=1;rewind(fp);while((fread(msg,sizeof(massage),1,fp)!=0)){ printf(“%s用户:t”,msg->username);printf(“%s:nn”,msg->mass); //结束操作 } fclose(fp);printf(“n退出成功!按回车键继续...”);getchar();getchar();free(msg);break; } } } } case '6': { system(“cls”);do{ } printf(“ntt您将退出学生用户中心n”);printf(“nttY:确认tN:取消”);printf(“nn您的选择是:t”);temp[5]=getchar();}while(!((temp[5]=='y')||(temp[5]=='Y')||(temp[5]=='n')||(temp[5]=='N')));if(temp[5]=='y'||temp[5]=='Y'){ } return 1;break;/* ====================== 学生用户登录返回0,则说明文件不存在,返回1,则说明找到用户信息,返回2,说明刚注册了该用户信息 ====================== */ char stucheck(char *nam,char *stnum)/*查找是否存在该学生信息*/ { FILE *fp;/*用于打开用户数据库*/ stu *st;/*目的用于寻找学生信息*/ st=(stu*)malloc(sizeof(stu));fp=fopen(stu_msg,“r”);if(fp==NULL){ } rewind(fp);while((fread(st,sizeof(stu),1,fp))==1){ if((strcmp(st->name,nam)==0)&&(strcmp(st->num,stnum)==0))/*核实用户名和学号printf(“ntt没有用户数据!请重新注册用户信息...”);getchar();return 0;是否正确*/ { memset(userlogin,' ',sizeof(userlogin)); } strcpy(userlogin,st->name); /*存在该学生用户,保存用户姓名*/ } printf(“ntt用户存在!请按回车键继续...”);getchar();fclose(fp); return 1; /*关闭学生文件*/ /*操作成功*/ if(strcmp(st->name,nam)==0){ } printf(“ntt用户名存在,学号错误!请按回车键继续...n”);getchar();fclose(fp);return 2;} fclose(fp);printf(“ntt学生用户不存在n”);getchar();return 3; /* ====================== 学生用户登录返回0,则说明文件不存在,返回1,则说明找到用户信息,返回2,说明刚注册了该用户信息 ====================== */ char newlogin(char *nam,char *stnum)/*注册学生信息*/ { char i=0;FILE *fp;stu *st;st=(stu*)malloc(sizeof(stu));i=stucheck(nam,stnum);switch(i){ case 0: { fp=fopen(stu_msg,“w”);printf(“ntt%s信息将被注册...”,nam);getchar();memset(st->num,' ',sizeof(st->num));memset(st->name,' ',sizeof(st->name)); /*对数据进行清零*/ /*对数据进行清零*/ strcpy(st->name,nam); strcpy(st->num,stnum); st->score[0]=0; st->score[1]=0; st->score[2]=0; st->score[3]=0; st->average=0; fwrite(st,sizeof(stu),1,fp); fclose(fp); return 1; } case 1: { return 0; break; } case 2: { return 0; break; } case 3: { memset(userlogin,' ',sizeof(userlogin)); strcpy(userlogin,st->name); fp=fopen(stu_msg,“a”); printf(“ntt%s信息将被注册...”); memset(st->num,' ',sizeof(st->num)); memset(st->name,' ',sizeof(st->name)); strcpy(st->name,nam); strcpy(st->num,stnum); st->score[0]=0; st->score[1]=0; st->score[2]=0; st->score[3]=0; st->average=0; fwrite(st,sizeof(stu),1,fp); fclose(fp); return 1; } default :return 0;} } /*保存学生信息*/ /*对数据进行清零*/ /*对数据进行清零*/ /*保存学生信息*/ /* ====================== 显示学生用户信息 ====================== */ void disnewst(void)/*获得学生信息*/ { stu *p;FILE *fp;char temp,full=0;printf(“姓名t学号t %st %st %st%st平均分 n”, sc_name[0],sc_name[1],sc_name[2],sc_name[3]); fp=fopen(stu_msg,“r”);p=(stu*)malloc(sizeof(stu));do { if(fread(p,sizeof(stu),1,fp)==1){ if(strcmp(userlogin,p->name)==0) { full=1; /*已找到用户信息*/ /*退出循环*/ } else { temp=0; full =0;temp =1;} } else { temp=0;} }while(temp);if(full==1){ printf(“%st%st %dt %dt%dt%dt%dn”,p->name,p->num,p->score[0],p->score[1],p->score[2],p->score[3],p->average);} getchar();else { printf(“nntt找不到学生用户信息!按回车键继续...”); } /* getchar();getchar();} fclose(fp); /*关闭文件信息*/ ====================== 发送公告 ====================== */ void sentmsg(void)/*发送公告*/ { } /* ====================== 浏览公告 ====================== */ char readmsg(void)/*浏览信息*/ { FILE *fp;massage *msg;FILE *fp;massage *msg;int i=0;fp=fopen(outmsg,“a+”);if(fp==NULL){ } fp=fopen(outmsg,“w+”);msg=(massage*)malloc(sizeof(massage));system(“cls”);printf(“nn请输入您要公布的信息,按回车键结束:t”);memset(msg,' ',sizeof(massage));//清除 scanf(“%s”,msg->mass);strcpy(msg->username,“管理员”);strcpy(msg->username,userlogin);fwrite(msg,sizeof(massage),1,fp);printf(“nn公告发布成功!”);getchar();getchar();free(msg);fclose(fp); int i=0;char key=0;char chose,temp=1;do{ system(“cls”);printf(“======================================n”);printf(“请输入您要浏览的信息:”);printf(“ n”);printf(“1.管理员邮箱n”);printf(“n”);printf(“2.学生共享信息n”);printf(“n”);printf(“3.公告邮箱信息n”);printf(“n”);printf(“4.退出”);printf(“n======================================n”);printf(“tttt请按照提示选择nn”);printf(“nn您的选择是:t”);key=getchar();if(!((key>'0')&&(key<'5'))){ printf(“n您的输入有误,请按回车键继续...n”);getchar();} }while(!((key>'0')&&(key<'5')));switch(key){ case '1': { fp=fopen(manager,“r”); msg=(massage*)malloc(sizeof(massage));memset(msg,' ',sizeof(massage));rewind(fp);while((fread(msg,sizeof(massage),1,fp)==1)){ } printf(“%s用户:t”,msg->username);printf(“%sn”,msg->mass);memset(msg,' ',sizeof(massage));getchar();getchar();free(msg);fclose(fp);return 1; break;} case '2': { msg=(massage*)malloc(sizeof(massage)); } fp=fopen(share,“r”);memset(msg,' ',sizeof(massage));//清除信息内容 rewind(fp);while((fread(msg,sizeof(massage),1,fp))!=0){ printf(“%s用户:t”,msg->username);printf(“%s:nn”,msg->mass); } fclose(fp);printf(“nn信息读取完毕!按回车键继续...”);//结束操作 getchar();getchar();free(msg);return 1;break;case '3': { fp=fopen(outmsg,“r”);msg=(massage*)malloc(sizeof(massage)); memset(msg,' ',sizeof(massage));rewind(fp);while((fread(msg,sizeof(massage),1,fp)==1)&&temp){ printf(“%s用户:t”,msg->username);printf(“%sn”,msg->mass);memset(msg,' ',sizeof(massage));} getchar();getchar();free(msg);fclose(fp);return 1;break;} case '4': { return 0;break; } /* } } ====================== 浏览公告 ====================== */ char delemsg(void)//删除信息 { FILE *fp;massage *msg;int i=0;char key=0;char chose,temp=1;do{ system(“cls”);printf(“======================================n”);printf(“请输入您要删除的信息:”);printf(“ n”);printf(“1.管理员邮箱n”);printf(“n”);printf(“2.学生共享信息n”);printf(“n”);printf(“3.公告信息n”);printf(“n”);printf(“4.退出”);printf(“n======================================n”);printf(“tttt请按照提示选择nn”);printf(“nn您的选择是:t”);key=getchar();if(!((key>'0')&&(key<'5'))){ printf(“n您的输入有误,请按回车键继续...n”);getchar();} }while(!((key>'0')&&(key<'5')));switch(key){ case '1': { #include void menu(University uni);//菜单函数声明 class Student//学生类 { public: string name;int age;string sex;int number;string major; public: void disp_stu(); friend void file_in(University &uni); friend void file_out(University uni);};void Student::disp_stu(){ } class Institute//学院类 { public: string name;cout<<“学生姓名:”< public: void add_stu(); //添加学生 bool delete_stu(int i); // 删除学生 bool modefy_stu(int i); //修改学生信息 void disp_ins_1(); // 显示本院学生信息 friend void file_in(University &uni); friend void file_out(University uni);};void Institute::add_stu(){ } Student *p=new Student;cout<<“学生名字:”;cin>>(*p).name;cout<<“学生年龄:”;cin>>(*p).age;cout<<“学生性别:”;cin>>(*p).sex;cout<<“学生学号:”;cin>>(*p).number;cout<<“学生专业:”;cin>>(*p).major;head.Add(p);//在链表末尾增加一个节点 bool Institute::delete_stu(int i){ } head.Remove(i);//删除链表指定位置节点 return true;bool Institute::modefy_stu(int i){ Student *p=new Student;cout<<“学生名字:”;cin>>(*p).name;cout<<“学生年龄:”;cin>>(*p).age;cout<<“学生性别:”;cin>>(*p).sex;cout<<“学生学号:”;cin>>(*p).number;cout<<“学生专业:”;cin>>(*p).major;head.Remove(i);//删除链表指定位置节点 head.Insert(i,p);//在链表指定位置插入一个新节点 return true;} void Institute::disp_ins_1(){ } class University//学校类 { public: string name;int age;string addr;List void design_stu();//学生信息设置 int i;Node cout<<“学院名字:”< } cout<<“-------”<pData->disp_stu();q=q->pNext; void add_ins(); //添加学院 bool delete_ins(int n); // 删除学院 void design_cqut(); //设置学校信息 bool modefy_cqut(); //修改学校信息 void disp_cqut(); //显示学校信息 void design_ins(); //学院信息设置 bool modefy_ins(int n); //修改学院 void disp_ins(); //显示学院信息 void search_menu();void search_name(string n);//姓名 void search(string n);//性别//函数重载 void search(int n);//学号 bool search_age(int n);//年龄 friend void file_in(University &uni);};friend void file_out(University uni); void University::design_stu(){ int i,m,j;int n;cout<<“ ★★★★★★学生信息设置★★★★★★ ”< { disp_ins(); cout< cout<<“输入学生所在学院序号:”< cin>>m;system(“cls”);//清屏 head.pCurrent=head.pHead;//当前指针指向双向链表头指针 for(j=1;j { } } head.pCurrent=head.pCurrent->pNext;//当前指针指后移 cout<<“输入要添加的学生信息:”;head.pCurrent->pData->add_stu();cout<<“按任意键返回上一级菜单:”< disp_ins(); cout< cout<<“输入学生所在学院序号:”< cin>>m;system(“cls”);//清屏 head.pCurrent=head.pHead;//当前指针指向双向链表头指针 for(j=1;j { head.pCurrent=head.pCurrent->pNext;//当前指针指后移 } } head.pCurrent->pData->disp_ins_1();cout< { disp_ins(); cout< cout<<“输入学生所在学院序号:”< cin>>m;system(“cls”);//清屏 head.pCurrent=head.pHead;//当前指针指向双向链表头指针 for(j=1;j { } } head.pCurrent=head.pCurrent->pNext;//当前指针指后移 head.pCurrent->pData->disp_ins_1();cout< } cin>>n;head.pCurrent->pData->modefy_stu(n);cout<<“按任意键返回上一级菜单:”< void University::add_ins(){ } bool University::delete_ins(int n){ } bool University::modefy_ins(int n){ Institute *p=new Institute;cout<<“学院名字:”;cin>>(*p).name;head.Remove(n);//删除链表指定位置节点 head.Insert(n,p);//在指定位置插入节点信息 return true;head.Remove(n);//删除链表指定位置节点 return true;Institute *p=new Institute;cout<<“学院名字:”;cin>>(*p).name;head.Add(p);//在链表末尾增加一个节点 } void University::disp_ins(){ int i;Node for(i=1;i<=head.size;i++){ cout<pData->name< } void University::design_ins(){ int i;int j;cout<<“ ★★★★★★学院信息设置★★★★★★ ”< cout< { } disp_ins();cout<<“按任意键返回上一级菜单:”< disp_ins(); add_ins(); cout<<“按任意键返回上一级菜单:”< getch();system(“cls”);//清屏 design_ins(); break;} case 3: { } disp_ins();cout<<“输入删除学院序号:”;cin>>j;delete_ins(j);cout<<“按任意键返回上一级菜单:”< disp_ins();cout<<“输入修改学院序号:”;cin>>j;modefy_ins(j);cout<<“按任意键返回上一级菜单:”< } case 5:menu(*this);break;} } bool University::modefy_cqut(){ cout<<“学校名字:”;cin>>name;cout<<“创建年代:”;cin>>age;cout<<“学校地址:”;cin>>addr;return true;} void University::design_cqut(){ int i; University uni;cout<<“ ★★★★★★学校信息设置★★★★★★ cout< switch(i){ case 1: { disp_cqut(); cout<<”按任意键返回上一级菜单:“< getch();system(”cls“);//清屏 design_cqut(); break; } case 2: { modefy_cqut(); cout<<”按任意键返回上一级菜单:“< getch();system(”cls“);//清屏 design_cqut();break;”< } } } case 3:menu(uni);break; void University::disp_cqut(){ cout<<“学校有关信息为:”< } void University::search_name(string n){ int i,j,m=0;head.pCurrent=head.pHead;//当前指针指向学院节点头指针 for(i=0;i for(j=0;j { if(n==head.pCurrent->pData->head.pCurrent->pData->name) { } head.pCurrent->pData->head.pCurrent->pData->disp_stu();m++;head.pCurrent->pData->head.pCurrent=head.pCurrent->pData->head.pCurrent->pNext;//学生当前指针后移 } bool University::search_age(int n){ int i,j,m=0;head.pCurrent=head.pHead;for(i=0;i } cout<<“有”< } head.pCurrent->pData->head.pCurrent=head.pCurrent->pData->head.pHead;for(j=0;j } head.pCurrent->pData->head.pCurrent->pData->disp_stu();m++;head.pCurrent->pData->head.pCurrent=head.pCurrent->pData->head.pCurrent->pNext;} head.pCurrent=head.pCurrent->pNext;} cout<<“有”< void University::search(string n){ } int i,j,m=0;head.pCurrent=head.pHead;for(i=0;i for(j=0;j if(n==head.pCurrent->pData->head.pCurrent->pData->sex){ head.pCurrent->pData->head.pCurrent->pData->disp_stu();} m++; head.pCurrent->pData->head.pCurrent=head.pCurrent->pData->head.pCurrent->pNext; } cout<<“有”< int i,j,m=0;head.pCurrent=head.pHead;for(i=0;i head.pCurrent->pData->head.pCurrent=head.pCurrent->pData->head.pHead; for(j=0;j { if(n==head.pCurrent->pData->head.pCurrent->pData->number) { head.pCurrent->pData->head.pCurrent->pData->disp_stu(); m++; } head.pCurrent->pData->head.pCurrent=head.pCurrent->pData->head.pCurrent->pNext; } head.pCurrent=head.pCurrent->pNext;} cout<<“有”< /****************************************信息查询菜***********************************************/ void University::search_menu(){ int i;cout<<“ ★★★★★信息查询显示★★★★★”< switch(i){ case 1: { 单 disp_ins(); cout<<“按任意键返回上一级菜单:”< { } head.pCurrent=head.pHead;//当前指针指向学院节点头指针 for(i=0;i } head.pCurrent->pData->disp_ins_1();head.pCurrent=head.pCurrent->pNext;cout<<“按任意键返回上一级菜单:”< } int j;disp_ins();cout<<“请输入学生所在学院序号:”;cin>>i;system(“cls”);//清屏 head.pCurrent=head.pHead;for(j=1;jpNext;head.pCurrent->pData->disp_ins_1();cout<<“按任意键返回上一级菜单:”< case 4: { string n;cout<<“输入要查询的姓名:”;cin>>n;system(“cls”);//清屏 search_name(n); } cout<<“按任意键返回上一级菜单:”< { } int n1;cout<<“输入要查询的年龄:”;cin>>n1;search_age(n1);cout<<“按任意键返回上一级菜单:”< system(“cls”);//清屏 case 6: { } string n;cout<<“输入要查询的性别:”;cin>>n;system(“cls”);//清屏 search(n);cout<<“按任意键返回上一级菜单:”< } int n;cout<<“输入要查询的学号:”;cin>>n;system(“cls”);//清屏 search(n);cout<<“按任意键返回上一级菜单:”< menu(*this); } } } break;/**********************************************************************/ { int i,j;ifstream inf(“cqutData.txt”,ios::in);inf>>uni.name;inf>>uni.age;inf>>uni.addr;inf>>uni.head.size;//学院个数 for(i=0;i 导出文件数据void file_in(University &uni) Node else uni.head.pEnd->pNext=m;//把节点m赋给下一个学院信息节点 m->pPrev=uni.head.pEnd;//节点m指向学院信息的尾节点 uni.head.pCurrent=uni.head.pEnd=m;//学院信息的尾节点始终指向m节点 inf>>uni.head.pCurrent->pData->head.size;//学生个数 for(j=0;j Student *q=new Student;inf>>q->name;inf>>q->age;inf>>q->sex;inf>>q->number;inf>>q->major; Node n->pPrev=uni.head.pCurrent->pData->head.pEnd; uni.head.pCurrent->pData->head.pCurrent=uni.head.pCurrent->pData->head.pEnd=n;//学生信息的尾节点始终指向n节点 } } } /************************************************************************************/ void file_out(University uni){ ofstream ouf(“cqutData.txt”,ios::out);int i,j;ouf< 导入文件数据ouf< uni.head.pCurrent=uni.head.pHead;//当前指针指向学院节点头指针 for(i=0;i ouf< ouf< uni.head.pCurrent->pData->head.pCurrent=uni.head.pCurrent->pData->head.pHead;//当前指针指向学生节点头指针 for(j=0;j ouf< uni.head.pCurrent->pData->head.pCurrent=uni.head.pCurrent->pData->head.pCurrent->pNext;//学生当前指针后移 } } } uni.head.pCurrent=uni.head.pCurrent->pNext;//学院当前指针后移 /************************退出系统菜单****************************/ void exit(University uni){ } int i;cout<<“是否保存修改内容:”< { } file_out(uni);exit(0);break;case 2:{exit(0);break;} case 3: { menu(uni);break;} case 4: { file_out(uni); } } menu(uni);break; /***************************************************************************************/ void menu(University uni){ system(“cls”);/*清屏*/ int i;cout< 主菜单 cout<<“★★★★★★★★★★★★★主菜单★★★★★★★★★★★★★”< cout< cout< cout< } int main(){ University u; } file_in(u);menu(u);return 0;switch(i){ case 1:uni.design_cqut();break;case 2:uni.design_ins();break;case 3:uni.design_stu();break; case 4:uni.search_menu();break; case 5:exit(uni);break;} 中北大学 数据库课程设计 说 明 书 学 院、系: 专 业: 学 生 姓 名: 设 计 题 目: 李翰超 软件学院 软件工程 学 号: 1221010619 计算机等级考试教务管理系统 起 迄 日 期: 2014年5月26日-2014年6月20日 指 导 教 师: 2012 年 6月 21 日.引言 随着全国计算机等级考试的全面推广,我市学生每年参加两次全国计算机等级考试,考试管理工作量相当大。但是靠人工的方式管理等级考试相关的信息,这种管理方式存在着许多缺点,如:工作效率低、统计容易出错,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。所以开发一个计算机等级考试成绩管理系统是非常必要的。2.需求分析 计算机等级考试分为若干种类:如:计算机一级VB、C语言;计算机二级VB、C语言、C++;计算机三级数据库、网络技术;计算机四级数据库工程师、网络工程师。对于每个种类,考试分为笔试和机试.计算机等级考试工作过程如下:每个考生在报名时,登记姓名、性别、报考种类、学校、身份证号、个人照片等。考试办公室根据考生报考的种类,以及所在的考区来安排考场,编排准考证号码,打印准考证。考生参加考试后,登记每个考生每项的成绩,并计算出每个考生笔试和机试的成绩是否都>=60分。对机试和笔试都>=60分的考生,按所在考区打印通过证书,同一考区按准考证号码顺序打印出通过证书,分发给考生;计算机四级只要笔试成绩>=60则通过;打印成绩表供考试办公室留存、备查。 开发计算机等级考试成绩管理系统,有计算机辅助实现上述过程,代替人工操作,节省人力、时间,提高工作效率。 2.1 处理对象(1)用户帐号密码管理 对考点代码,考点名称进行管理 用户与密码进行管理(2)报名管理功能模块 报各库录入(姓名不能不空,之间不能有空格)增加、删除、修改、浏览(3)准考证管理模块 准考证生成规则:xxx+yy+zz+kk 其中XXX为考点代码;YY为语言代码,XX为考场号,KK为座位号(4)考务管理功能模块 考生信息查询、浏览 成绩管理模块 成绩数据录入、接收 成绩合成(总成绩=笔试成绩*0.6+上机成绩*0.4),按大于或等于60合格 2.2数据字典: 考生信息表(考生主键(主键),姓名,性别,出生年份,民族,身份证号,联系地址,联系电话,备注) 准考证表(准考证号主键,准考证号) 成绩表(成绩表主键,笔试成绩,上机成绩,总成绩) 级别语言代码表(级别语言代码主键,级别语言代码,级别,语言)考生考点信息表(考生考点主键,考点代码,考点名称,)用户帐号管理(用户帐号主键,用户名,密码) 信息操作表(考生主键(主键),准考证号主键, 级别语言代码主键,考生考点主键,用户帐号主键) 3.E-R图 4.关系模型 考生信息表(考生主键(主键),姓名,性别,出生年份,民族,身份证号,联系地址,联系电话,备注) 准考证表(准考证号主键,准考证号) 成绩表(成绩表主键,笔试成绩,上机成绩,总成绩) 级别语言代码表(级别语言代码主键,级别语言代码,级别,语言) 考生考点信息表(考生考点主键,考点代码,考点名称,)用户帐号管理(用户帐号主键,用户名,密码) 信息操作表(考生主键(主键),准考证号主键, 级别语言代码主键,考生考点主键,用户帐号主键) 其模式定义: 见附件:模式定义。 5.物理设计 本数据库共有5张表组成,其中t_manage表为管理表,而其他4张表:t_grade,t_information,t_level,t_regist都为基本表,当要查询所需要的信息时,就用连接查询将管理表和基本表连接在一起,从而看到想看到信息。 6.数据库实施 create table t_grade(grade number primary key, write number, shangji number, totalgrade number);alter table t_grade add constraint write check(write<=40 and write>=0);alter table t_grade add constraint shangji check(shangji<=60 and shangji>=0);alter table t_grade add constraint totalgrade check (totalgrade=write+shangji); insert into t_grade values(001,40,50,90);insert into t_grade values(002,30,50,80);insert into t_grade values(003,20,60,80);insert into t_grade values(004,25,50,75);insert into t_grade values(005,30,40,70);create table t_information(information number, sname varchar2(20)not null, gender varchar2(2)check(gender='n' or gender='v'), birth number, nation varchar2(20)not null, idnumber char(18), address varchar2(20)not null, phone number not null, note varchar2(20),primary key(information));alter table t_information add constraint birth check(birth<=20020101 and birth>=19200101); insert into t_information values (006,'ling','n',19950302,'han','***014','shanxi','0101111',null);insert into t_information values (007,'wang','n',19950607,'han','***014','shanxi','0101241',null);insert into t_information values (008,'john','n',19950504,'german','***014','german','010234511' ,'forgien');insert into t_information values (009,'liu','v',19930407,'han','***014','shanxi','010123511',nul l);insert into t_information values (010,'yuan','n',19910408,'han','***014','shanxi','0101211',null);create table t_level(leve number primary key, codes number not null, language varchar2(15)not null);insert into t_level values(015,01,'chinese');insert into t_level values(016,01,'chinese');insert into t_level values(017,02,'chinese');insert into t_level values(018,01,'english');insert into t_level values(019,01,'chinese'); create table t_regist(regist number, place varchar2(14), registnumber varchar2(9), primary key(regist)); insert into t_regist values(020,10101,'14010101');insert into t_regist values(021,10201,'14010102');insert into t_regist values(022,11101,'14010103');insert into t_regist values(023,12101,'14010104');insert into t_regist values(024,15103,'14010105');create table t_user(use number, username varchar2(14)not null, code varchar2(20)not null, primary key(use)); insert into t_user values(025,'ling','asasn');insert into t_user values(026,'wang','asasn');insert into t_user values(027,'john','sdrhy');insert into t_user values(028,'liu','eryery');insert into t_user values(029,'yuan','hjlmyu'); create table t_manage(information number, grade number, leve number, use number, regist number, foreign key(grade)references t_grade(grade), foreign key(information)references t_information(information), foreign key(leve)references t_level(leve), foreign key(regist)references t_regist(regist), foreign key(use)references t_user(use)); insert into t_manage values(006,001,015,025,020);5 insert into t_manage values(007,002,016,026,021);insert into t_manage values(008,003,017,027,022);insert into t_manage values(009,004,018,028,023);insert into t_manage values(010,005,019,029,024); 7.系统调试 通过sql语句对其进行调试,以测试其正确性,如图1,2,3,4,5 图 1 6 图 2 图 3 7 图 4 用自然连接查询: 图 5 8.心得体会 本次课程设计主要设计一个计算机管理系统,我的大体思路就是将基本信息录入到基本表当中,并保证没有重复属性,然后设计一个管理表,让其它基本表参照这个管理表,这个管理表当中只有各表主键,需要查看信息时,就将两表连接。。 这次课设我觉得有两个难点,一个是表间的参照,另一个是约束条件的设置,尤其是约束条件一定要充分考虑到,还有当有那种范围值的约束时要在建表后要用alter修改,而不是在定义时直接约束。 最后一点是关于主键的问题,主键最好别用学号什么的,最好应该用连续的、无意义的数字,create sequence之后,每加一个元组就用一次nextval,这样可以让电脑自动排号。 源代码: CREATE DATABASE JWGL /*建立教务管理系统*/ ON (NAME = JWGL_Data,FILENAME = 'e:sql_dataJwgl_Data.mdf', SIZE = 20, MAXSIZE = 500, FILEGROWTH = 25%)LOG ON (NAME = JWGL_LOG,FILENAME = 'e:sql_dataJwgl_Log.ldf', SIZE = 10, MAXSIZE = 100, FILEGROWTH = 1%); CREATE TABLE Student /*建立学生表*/(Sno CHAR(8)PRIMARY KEY NOT NULL, Sname VARCHAR(10)NOT NULL,Sex CHAR(2)CHECK(Sex IN('男','女'))NOT NULL,Age TINYINT CHECK(Age BETWEEN 15 AND 30)NOT NULL, Phonenumber CHAR(12)UNIQUE, Sdept VARCHAR(20)NOT NULL,); CREATE TABLE Course /*建立课程表*/(Cno CHAR(10)PRIMARY KEY NOT NULL, Cname VARCHAR(20)UNIQUE NOT NULL,Total_perior TINYINT CHECK(Total_perior BETWEEN 32 AND 108),/*总学时*/ Week_perior TINYINT CHECK(Week_perior BETWEEN 2 AND 7),/*周学时*/ Credit TINYINT CHECK(Credit BETWEEN 1 AND 7)NOT NULL,/*学分*/ Pcno CHAR(10)/*先修课*/); CREATE TABLE SC /*建立学生选课表*/(Sno CHAR(8)NOT NULL, Cno CHAR(10)NOT NULL,Grade TINYINT CHECK(Grade BETWEEN 1 AND 100), PRIMARY KEY(Sno,Cno),FOREIGN KEY(Sno)REFERENCES Student(Sno), FOREIGN KEY(Cno)REFERENCES Course(Cno)); DROP TABLE Student /*删除学生表*/ DROP TABLE Course /*删除课程表*/ DROP TABLE SC /*删除学生选课表*/ INSERT /*向学生表中插入数据*/ INTO Student VALUES('04111020','张倩','女',19,'***','计算机');INSERT INTO Student VALUES('04111021','张花','女',20,'***','信息');INSERT INTO Student VALUES('04111022','李强','男',20,'***','英语');INSERT INTO Student VALUES('04111023','王若','女',19,'***','计算机');INSERT INTO Student VALUES('04111024','小淼','男',20,'***','信息');INSERT INTO Student VALUES('04111025','李新','男',20,'***','英语');INSERT INTO Student VALUES('04111026','刘浮','男',19,'***','信息');INSERT INTO Student VALUES('04111027','二毛','男',20,'***','英语');INSERT INTO Student VALUES('04111028','朱琪','女',19,'***','计算机');INSERT INTO Student VALUES('04111029','小马','男',20,'***1','信息');INSERT INTO Student VALUES('04111030','吴欣','女',20,'***','英语') INSERT /*向课程表中插入数据*/ INTO Course SELECT '0011','数据结构','64','2','3','c语言' UNION SELECT '0012','数据库','64','2','3','离散数学' UNION SELECT '0013','信息管理','64','2','3','计算机基础' UNION SELECT '0014','专业英语','64','2','4','基础英语' UNION SELECT '0015','电气学','64','2','4','电子科技' INSERT /*向学生选课表中插入数据*/ INTO SC SELECT '04111020','0011','90' UNION SELECT '04111020','0012','87' UNION SELECT '04111022','0012','85' UNION SELECT '04111022','0015','76' UNION SELECT '04111023','0014','69' UNION SELECT '04111024','0013','90' UNION SELECT '04111025','0011','92' UNION SELECT '04111026','0011','83' UNION SELECT '04111027','0012','87' UNION SELECT '04111027','0013','79' UNION SELECT '04111028','0011','88' UNION SELECT '04111028','0014','85' UNION SELECT '04111029','0012','97' UNION SELECT '04111030','0013','69' UNION SELECT '04111028','0015','88' CREATE TABLE Student_temp /*建立 Student_temp空表*/(Sno CHAR(8)PRIMARY KEY NOT NULL, Sname VARCHAR(10)NOT NULL,Sex CHAR(2)CHECK(Sex IN('男','女'))NOT NULL,Age TINYINT CHECK(Age BETWEEN 15 AND 30)NOT NULL, Phonenumber CHAR(12)UNIQUE, Sdept VARCHAR(20)NOT NULL,); INSERT INTO Student_temp /*在Student_temp表中保存计算机系所有学生的情况*/ SELECT * FROM Student WHERE Sdept = '计算机'; ALTER TABLE Student ADD Address CHAR(20); /*向Student表中插入地址列*/ DELETE FROM SC /*删除计算机系学生的选课记录*/ WHERE Sno IN(SELECT Sno FROM Student WHERE Sdept ='计算机'); UPDATE Student /*将每个学生的年龄增加1岁*/ SET Age=Age+1;UPDATE SC SET Grade=0 WHERE Sno IN(SELECT Sno FROM Student WHERE Sdept = '计算机'); SELECT Sno,Sname,Sdept /*查询学生表中所有学生的学号、姓名、所在系*/ FROM Student; SELECT * /*查询学生表中的所有信息*/ FROM Student; SELECT Sname,2013-Age AS Birthday /*查询学生表中所有学生的出生年份,用2013-Age的值作为Birthday的列值*/ FROM Student; SELECT * /*查询课程表中的所有信息*/ FROM Course; SELECT * /*查询学生选课表中的所有信息*/ FROM SC; SELECT DISTINCT Sno /*查询所有选了课程的学生的学号*/ FROM SC; SELECT Sno,Sname /*查询计算机系所有学生的学号和姓名*/ FROM Student WHERE Sdept ='计算机'; SELECT Sno /*查询考试成绩在80分以上的学生学号*/ FROM SC WHERE Grade >=80; SELECT Sname,Sdept,Age /*查询年龄在20-23岁的学生姓名、所在系和年龄*/ FROM Student WHERE Age >=20 AND Age <=23; SELECT Sname,Sdept,Age,Sex /*查询计算机和英语系的学生姓名、年龄和性别*/ FROM Student WHERE Sdept IN('计算机','英语'); SELECT Sname,Sdept,Age,Sex /*查询不是计算机和英语系的学生姓名、年龄和性别*/ FROM Student WHERE Sdept NOT IN('计算机','英语'); SELECT * /*查询信息系所有学生的情况*/ FROM Student WHERE Sdept LIKE '信息'; SELECT * /*查询姓张的学生所有信息*/ FROM Student WHERE Sname LIKE '张%'; SELECT Cno,Credit /* 查询'数据结构'课程的课程号和学分*/ FROM Course WHERE Cname LIKE '数据结构'; SELECT Sno,Cno /*查询没有考试成绩的课程后和学分*/ FROM SC WHERE Grade IS NULL; SELECT * /*查询全体学生的信息,查询结果按所在系的升序排列,同一系中的学生按年龄降序排列*/ FROM Student ORDER BY Sdept ,Age DESC; SELECT AVG(Grade)AS '平均成绩' /*查询选修'0014'号课程的学生的平均分*/ FROM SC WHERE Cno ='0014'; SELECT MIN(DISTINCT Grade)AS '最低分' /*查询成绩表中的最低分*/ FROM SC; SELECT COUNT(*)AS'总人数' /*统计学生总人数*/ FROM Student; SELECT COUNT(DISTINCT Sno)/*统计选修了课程的学生人数*/ FROM SC; SELECT Cno ,COUNT(Sno)/*查询每门课程的课程号及选课人数*/ FROM SC GROUP BY Cno; SELECT Student.*,SC.* /*查询每个学生及其选修课的情况*/ FROM Student ,SC WHERE Student.Sno=SC.Sno; SELECT Student.Sno,Sname,Grade /*查询选修了'数据库'课程并且成绩在85分以上的学生的学号和姓名*/ FROM Student ,Course,SC WHERE Student.Sno = SC.Sno AND SC.Cno = Course.Cno AND Cname = '数据库'AND Grade>85; SELECT Sno,Sname /*查询和王若在同一个系学习的学生的学号和姓名*/ FROM Student WHERE Sdept = (SELECT Sdept FROM Student SELECT Sname ,Age /*查询其他系中比英语系某一学生年龄小的学生是姓名和年龄*/ FROM Student WHERE Sdept <>'英语' AND AGE FROM Student WHERE Sdept ='英语'); SELECT Sname /*查询选修了0014号课程的学生的姓名*/ FROM Student WHERE EXISTS (SELECT * FROM SC WHERE Sno =Student.Sno AND Cno='0014'); SELECT Cno FROM Course UNION ALL /*ALL表示合并两个查询输出的全部记录,没有ALL表示结果中不包含重复行*/ SELECT Cno FROM SC ORDER BY Cno; CREATE PROCEDURE Student_Course /*在学生-课程数据库中创建存储过程,查看和'小马'有关的基本信息及选修课程*/ AS SELECT Student.Sno,Sname,Cname,Grade FROM Student,Course,SC WHERE Student.Sno=SC.Sno AND Course.Cno=SC.Sno AND Sname='王若' IF EXISTS(SELECT name FROM sysobjects WHERE name='Student_Course' AND type='P') DROP PROCEDURE Student_Course;WHERE Sname = '王若');EXECUTE Student_Course;/*查看存储的信息*/ SELECT Sno /*查询选修'0012'或'0015'号课程的所以学生的学号*/ FROM SC WHERE Cno='0012' UNION SELECT Sno FROM SC WHERE Cno='0015'; CREATE UNIQUE INDEX Stusno ON Student(sno);/*建立索引*/ CREATE UNIQUE INDEX Coucon ON Course(Cno); CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Grade DESC); drop index Stusno ON Student/*删除索引*/ drop index Coucon ON Course drop index SCno ON SC CREATE VIEW C_Student /*建立计算机系学生的视图,进行修改和插入操作时只能对计算机系的学生操作*/ AS SELECT Sno,Sname,Sex,Age FROM Student WHERE Sdept='计算机' WITH CHECK OPTION CREATE VIEW Student_Course_0013(Sno,Sname,Sex,Age,Grade)/*建立选择0013号课程并且成绩在80分以上的学生视图*/ AS SELECT Student.Sno,Sname,Sex,Age,Grade FROM Student,SC WHERE Student.Sno=SC.Sno AND Grade>=80 AND Cno='0013' CREATE VIEW Student_Birth(Sno,Sname,Sbirth)/*建立反应学生出生年份的视图*/ AS SELECT Sno,Sname,2013-Age FROM Student CREATE PROCEDURE student_count/*创建一个存储过程,返回选修某门课程的学生人数*/ @CourseName VARCHAR(20), @StudentSum INT OUTPUT AS SELECT @StudentSum=COUNT(*)FROM Course ,SC WHERE Course.Cno=SC.Cno AND Cname =@CourseName; drop procedure student_count;/* DELCARE @StudentSum INT; EXECUTE student_count '专业英语',@StudentSum output;SELECT 'the result is:',@Student_Sum;*/ CREATE PROCEDURE student_course1 /*通过参数@StudentName将指定学生的姓名传递给存储过程*/ @StudentName VARCHAR(10)AS SELECT Student.Sno,Sname,Cname,Grade FROM Student,Course,SC WHERE Student.Sno=SC.Sno AND Course.Cno=SC.Cno AND Sname=@StudentName; EXECUTE student_course1 '小马';/*调用存储过程*/ /*删除视图*/ DROP VIEW C_Student; DROP VIEW Student_Course_0013;DROP VIEW Student_Birth; CREATE TRIGGER student_change/*创建触发器,当学生表中的记录被更新时,显示表中的所有记录*/ ON Student AFTER INSERT,UPDATE,DELETE AS SELECT * FROM Student; CREATE TRIGGER sc_insert3 ON SC /*在SC表上创建触发器,当向SC表中添加学生的选课记录时,检查学生的学号是否存在。若不存在,不能插入改条记录*/ AFTER INSERT AS IF(SELECT COUNT(*)FROM Student ,inserted WHERE Student.Sno=inserted.Sno)=0 BEGIN PRINT'学号不存在,不能插入记录' ROLLBACK TRANSACTION END; INSERT INTO SC VALUES('04111098','0015',73) ALTER TABLE SC /*删除触发器*/ DISABLE TRIGGER sc_insert2 #include string name;};class Student:public Person { public: Student(string n,int num,string ss):Person(n),number(num),address(add),str1(ss){} virtual void show(); void input_stu(); void display_stu(); void display_qu(); ~Student(){} protected: string str1; int number; string address;};void Student::show(){ cout<<“向老师提出的问题是:”;cin>>str1;} void Student::display_qu(){ cout< void Student::input_stu(){ cin>>Student::name;cin>>Student::number;cin>>Student::address;} void Student::display_stu(){ add,string cout<<“姓名:”< Teacher(string n,string sub,string sdf):Person(n),subject(sub),str2(sdf){} virtual void show(); void input_t(); void display_t(); void display_an(); ~Teacher(){} protected: string subject; string str2;};void Teacher::display_an(){ cout< void Teacher::show(){ cout<<“我的回答是:”;cin>>str2;} void Teacher::input_t(){ cin>>Teacher::name;cin>>Teacher::subject;} void Teacher::display_t(){ cout<<“姓名:”< Admin(string n,int tel,string ssfs):Person(n),telphone(tel),str3(ssfs){} virtual void show(); void input_ad(); void display_ad(); void display_gg(); ~Admin(){} protected: int telphone; string str3;};void Admin::display_gg(){ cout<<“公告:”;cout< void Admin::show(){ cout<<“公告是:”;cin>>str3;} void Admin::input_ad(){ cin>>Admin::name;cin>>Admin::telphone;} void Admin::display_ad(){ cout<<“姓名是:”< int main(){ int z,h,m;z=0;h=0;m=0; Student stu(“guochun”,20150311,“qlu”,“sdss”); Teacher tea(“cuiyu”,“math”,“dsdf”); Admin ad(“steve jobs”,178641,“sdfs”); while(1) { int x; cout<<“*******************”< cout<<“1.学生”< cout<<“2.教师”< cout<<“3.管理员”< cout<<“*******************”< cout<<“选择你的身份”< cin>>x; if(x<=0||x>3) cout<<“输入错误!”< else { switch(x) { case 1: cout<<“请选择你要干什么”< case 1:stu.display_stu();break; case 2:stu.input_stu(); } cout<<“修改后的个人信息为:”< { stu.Student::show(); z=1;} break; } break; case 2: cout<<“请选择你要干什么”< cout<<“学生有问题提问”< ad.display_gg();} cout<<“___________________”< cout<<“发生错误!”;else { switch(q) { case 1:tea.display_t();break; case 2:tea.input_t(); cout<<“修改后的个人信息为:”< tea.display_t();break; case 3: { if(z==1) { cout<<“学生的问题是:”; stu.display_qu(); tea.Teacher::show(); h=1; } } break; } } break; case 3: cout<<“请选择你要干什么”< cout<<“___________________”< cout<<“1.显示个人信息”< cout<<“发生错误!”; else { switch(l) { case 1:ad.display_ad();break; case 2:ad.input_ad(); cout<<“修改后的个人信息为:”< ad.display_ad();break; case 3: { ad.Admin::show(); m=1; } break; } } break; } } } return 0;}第二篇:C++课程设计(教务管理系统)
第三篇:数据库课程设计 计算机教务管理系统
第四篇:数据库课程设计之教务管理系统
第五篇:c++课程设计:教务管理系统源代码