C语言课程设计及任务学生信息管理系统.docx
- 文档编号:23821592
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:18
- 大小:19.30KB
C语言课程设计及任务学生信息管理系统.docx
《C语言课程设计及任务学生信息管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计及任务学生信息管理系统.docx(18页珍藏版)》请在冰豆网上搜索。
C语言课程设计及任务学生信息管理系统
#include #include〈stdlib。 h> #include〈string。 h〉 #definePFprintf #defineLENsizeof(structstudent) //◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆定义结构体◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆ structstudent { charNO[20]; charname[20]; intage; charsex[3];/*’F'表示性别男,'M'表示性别女*/ charbirthday[10]; charaddress[30]; charphone[20]; chare_mail[20]; structstudent*next;//下个结点 }; typedefstructstudentSTU; STU*head=NULL;//全局指针 intn,i=0;//全局变量 //◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆自定义函数◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆ voidshow_menu();//显示菜单 voidmenu();//执行菜单 voidcreat_stu();//建立链表 voidinsert_stu();//学生信息录入 voidprint_stu();//学生信浏览 voidsearch_NO();//以学号方式查询信息 voidsearch_name();//以姓名方式查询信息 voidarrage_stu();//排序 voiddel_stu();//删除学生信息 voidrevise_stu();//修改学生信息 voidsave();//保存信息 voidmain() { creat_stu(); menu(); } //◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆创建链表◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆ voidcreat_stu(){ FILE*fp; longsize; STU*p1,*p2; head=(STU*)malloc(sizeof(STU)); head—〉next=NULL; if((fp=fopen(”fname。 txt","r”))==NULL) { printf("这是新表\n”); return; } fseek(fp,0L,2); size=ftell(fp); if(! size) { printf(”这是空表\n"); return; }//开始创建链表 rewind(fp);//移动到文件首 p2=head—〉next;//找到但前位置 while(! feof(fp)) { p1=(STU*)malloc(sizeof(STU)); fscanf(fp,"%s%s%d%s%s%s%s%s\n”,p1-〉NO,p1—>name,&p1—〉age,\ p1-〉sex,p1—〉birthday,p1—〉address,p1->phone,p1->e_mail); p1->next=NULL; //创建节点完 if(head—>next==NULL) head—>next=p1; else p2—〉next=p1; p2=p1; n++; } p2-〉next=NULL; fclose(fp); } //◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆执行菜单◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆ voidmenu() { intc; show_menu(); while (1) { scanf("%d",&c); switch(c) { getchar(); case1: insert_stu();break; case2: print_stu();break; case3: search_NO();break; case4: search_name();break; case5: del_stu();break; case6: revise_stu();break; case7: arrage_stu();break; case0: exit(0); }//执行菜单选项 show_menu(); } } //◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆显示菜单◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆ voidshow_menu() { PF(”\n”); PF("\n※※※※※※※※※※※※※※※※※※菜单※※※※※※※※※※※※※※※※※※\n"); PF(”\t\t◆1。 输入学生信息◆\n”); PF(”\t\t★2。 浏览学生信息★\n"); PF("\t\t◆3.以学号方式查询信息◆\n”); PF(”\t\t★4。 以姓名方式查询信息★\n"); PF(”\t\t◆5.删除学生信息◆\n”); PF(”\t\t★6。 修改学生信息★\n"); PF("\t\t◆7排序◆\n"); PF(”\t\t★0。 退出★\n"); PF(”※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n”); PF(”\n请选择\n”); } //◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆学生信息录入◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆ voidinsert_stu()//学生信息录入 { n=0; STU*p1=NULL,*p2=NULL; p1=(STU*)malloc(sizeof(STU)); PF("\n※※※※※※※※※※※※※※※※※※录入学生信息※※※※※※※※※※※※※※※※※※\n");//录入学生信息 PF(”\t\t输入学生学号: \t"); scanf("%s”,p1—〉NO);//学号 PF("\t\t输入学生姓名: \t"); scanf(”%s",p1—>name);//姓名 PF(”\t\t输入学生年龄: \t"); scanf(”%d",&p1-〉age);//年龄 PF(”\t\t输入学生性别: \t”); scanf(”%s”,p1->sex);//性别 PF(”\t\t输入学生出生年月: \t”); scanf("%s",p1->birthday);//出生年月 PF("\t\t输入学生地址: \t”); scanf("%s”,p1—>address);//地址 PF("\t\t输入学生电话: \t”); scanf(”%s”,p1—>phone);//电话 PF(”\t\t输入学生E-mail: \t"); scanf(”%s",p1->e_mail);//E—mail n++; if(head—〉next==NULL) { head=(STU*)malloc(LEN); head—〉next=p1; } else { for(p2=head;p2-〉next! =NULL;p2=p2->next);/*找到最后的结点,然后 将增加的结点挂在它上面*/ p2-〉next=p1; } p1—〉next=NULL; save();//保存到文件 } //◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆学生信息浏览◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆ voidprint_stu()//学生信浏览 { STU*p=NULL; if(head==NULL)//判断链表是否为空 { PF("文档中无记录! \n”); return; } for(p=head-〉next;p! =NULL;p=p-〉next)//读出信息 { PF("※※※※※※※※※※※※※※※※※※学生信息浏览※※※※※※※※※※※※※※※※※※\n"); PF(”\t\t学生学号: \t%s\n",p-〉NO); PF("\t\t学生姓名: \t%s\n”,p->name); PF(”\t\t学生年龄: \t%d\n”,p-〉age); PF(”\t\t学生性别: \t%s\n”,p-〉sex); PF(”\t\t学生出生年月: \t%s\n”,p—〉birthday); PF(”\t\t学生地址: \t%s\n”,p—〉address); PF(”\t\t学生电话: \t%s\n",p->phone); PF("\t\t学生E-mail: \t%s\n",p—>e_mail); PF(”\n”);}//输出信息 } //◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆学生姓名信息查找◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆ voidsearch_name()//学生姓名信息查找 { STU*p=NULL; charname[20]; if(head==NULL)//判断链表是否为空 { PF(”文档中无记录! \n"); return; } PF(”输入学生姓名: ”); scanf(”%s",name); for(p=head—>next;p! =NULL;p=p—>next)//读出信息 { if(! strcmp(p—〉name,name)) {PF(”※※※※※※※※※※※※※※※※※※您查找的学生是※※※※※※※※※※※※※※※※※※\n”); PF("\t\t学生学号: \t%s\n”,p—〉NO); PF(”\t\t学生姓名: \t%s\n”,p—〉name); PF("\t\t学生年龄: \t%d\n”,p—〉age); PF(”\t\t学生性别: \t%s\n",p—〉sex); PF(”\t\t学生出生年月: \t%s\n”,p—>birthday); PF(”\t\t学生地址: \t%s\n”,p->address); PF("\t\t学生电话: \t%s\n",p—>phone); PF("\t\t学生E—mail: \t%s\n”,p—〉e_mail); PF(”\n”); i=1;} }//输出信息 if(! i) {PF(”无该生信息! 请查证: ");}//没找到信息时的处理 } //◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆学生学号信息查找◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆ voidsearch_NO()//学生学号信息查找 { STU*p=NULL; charNO[20]; if(head==NULL)//判断链表是否为空 { PF(”文档中无记录! \n”); return; } PF("请输入学生学号: ”); scanf("%s",NO); for(p=head->next;p! =NULL;p=p—>next)//读出信息 { if(! strcmp(p—>NO,NO)) {PF(”※※※※※※※※※※※※※※※※※※您查找的学生是※※※※※※※※※※※※※※※※※※\n"); PF(”\t\t学生学号: \t%s\n”,p—〉NO); PF("\t\t学生姓名: \t%s\n",p-〉name); PF(”\t\t学生年龄: \t%d\n",p->age); PF(”\t\t学生性别: \t%s\n”,p—〉sex); PF(”\t\t学生出生年月: \t%s\n",p—〉birthday); PF(”\t\t学生地址: \t%s\n",p—〉address); PF("\t\t学生电话: \t%s\n”,p—〉phone); PF(”\t\t学生E-mail: \t%s\n",p->e_mail); PF(”\n”); i=1;} }//输出信息 if(! i) {PF("无该生信息! 请查证: ”);}//没找到信息时的处理 } //◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆修改学生信息◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆ voidrevise_stu() { STU*p=NULL; if(head==NULL)//判断链表是否为空 { PF(”文档中无记录! \n”); return; } charNO[20]; PF("请输入学生的学号: \t”); scanf(”%s”,NO); for(p=head—〉next;p! =NULL;p=p—〉next) { if(! strcmp(p—〉NO,NO))//验证信息是否正确 { PF(”※※※※※※※※※※※※※※※※※※您要修改的学生是※※※※※※※※※※※※※※※※※※\n”); PF(”\t\t学生学号: \t%s\n",p->NO); PF(”\t\t学生姓名: \t%s\n”,p-〉name); PF(”\t\t学生年龄: \t%d\n",p-〉age); PF("\t\t学生性别: \t%s\n”,p—>sex); PF(”\t\t学生出生年月: \t%s\n”,p—〉birthday); PF(”\t\t学生地址: \t%s\n",p—〉address); PF("\t\t学生电话: \t%s\n",p—〉phone); PF(”\t\t学生E—mail: \t%s\n”,p—>e_mail); PF(”\n");//输出要修改信息 i=1; PF(”※※※※※※※※※※※※※※※※※※修改学号为%s的学生※※※※※※※※※※※※※※※※※※\n”,NO); strcpy(p-〉NO,NO); PF("\t\t输入修改学生姓名: \t"); scanf("%s”,p—>name); PF(”\t\t输入修改学生年龄: \t”); scanf(”%d”,&p—>age); PF(”\t\t输入修改学生性别: \t”); scanf(”%s",p—>sex); PF(”\t\t输入修改学生出生年月: \t"); scanf(”%s”,p—>birthday); PF(”\t\t输入修改学生地址: \t”); scanf("%s",p-〉address); PF(”\t\t输入修改学生电话: \t"); scanf("%s",p—〉phone); PF("\t\t输入修改学生E—mail: \t”); scanf(”%s”,p—>e_mail); PF("\n");//输入修改信息 save(); } }if(! i) {PF("无该生信息! 请查证: ”);}/*没找到信息时的处理*/ } //◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆删除学生信息◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆ voiddel_stu() { STU*p=NULL; if(head==NULL)//判断链表是否为空 { PF(”文档中无记录! \n”); return; } else { charNO[20]; PF(”请输入学生的学号: \t"); scanf(”%s”,NO); for(p=head;p! =NULL;p=p—〉next) { if(! strcmp(p-〉next—〉NO,NO))//验证信息是否正确 { PF(”※※※※※※※※※※※※※※※※※※您要删除的学生是※※※※※※※※※※※※※※※※※※\n”); PF(”\t\t学生学号: \t%s\n”,p-〉next—〉NO); PF(”\t\t学生姓名: \t%s\n",p—〉next—〉name); PF(”\t\t学生年龄: \t%d\n",p—>next->age); PF(”\t\t学生性别: \t%s\n”,p—〉next—>sex); PF(”\t\t学生出生年月: \t%s\n",p—〉next—〉birthday); PF("\t\t学生地址: \t%s\n",p—>next-〉address); PF("\t\t学生电话: \t%s\n”,p->next—〉phone); PF(”\t\t学生E—mail: \t%s\n”,p—>next—〉e_mail); PF("\n”);//输出要删除的信息 i=1; if(p-〉next—〉next) { printf("第一个\n”); p—〉next=p—>next—〉next; } else p—〉next=NULL; n-—; save(); return; }if(! i) {PF(”无该生信息! 请查证: ”);//没找到信息时的处理 return;} } } } //◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆按学号排序◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆ voidarrage_stu() { STU*p1,*p2; intin=0,j; if(head—〉next==NULL)//首先判断 { printf(”你还没有记录,无法排序\n”); return; } printf("n=%d”,n); p1=head—〉next; for(in=0;in for(j=0,p1=head—>next;j<=n-in—3;p1=p1-〉next,j++) { if(j==0)//第一次比较第一个和第二个节点信息 { if(strcmp(p1-〉NO,p1—>next->NO))//比较p1本身和p1下一个节点 { p2=p1—〉next; p1—〉next=p1-〉next—〉next; p2-〉next=p1; head—〉next=p2; p1=head->next;//从新给CUR赋值 /* p1=head—〉next; p1=p2; 错误: 如果一个变量=他前一个节点的NEXT那么不可以说把另外一个变量赋给它就可以改变它 前一个节点的NEXT他只能操作后节点! ! ! */ } } if(strcmp(p1—>next->NO,p1->next—>next-〉NO))//比较p1下一个和p1下两个节点 { p2=p1—>next; p1—>next=p1—>next-〉next; p2—〉next=p1—>next—>next; p1-〉next—〉next=p2; } } if(strcmp(head-〉next-〉NO,head-〉next—>next—〉NO))//只有两个节点信息时直接比较他们两个 { p1=head-〉next; head-〉next=p1—〉next; p1—>next=p1—〉next—〉next; head—>next->next=p1; if(n==2)//只有两个节点信息时把第二个节点的next赋为空 head—>next-〉next->next=NULL; } } //◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆保存信息◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆ voidsave() { printf("※※※※※※※※※※※※※※※※※※保存信息并结束※※※※※※※※※※※※※※※※※※\n”); STU*p=NULL; FILE*fp; char*filename=”fname。 txt”; if((fp=fopen(”fname。 txt”,”w”))==NULL)//出错检测 { printf("\n打不开文件! \n”); return; } if(head—>next==NULL) { printf("\n信息为空! \n"); return; } else p=head—〉next; while(p! =NULL) { fprintf(fp,”%s%s%d%s%s%s%s%s\n”,p-〉NO,p-〉name,p—〉age, p-〉sex,p-〉birthday,p—>address,p—>phone,p-〉e_mail);//存入文件 p=p—>next; } printf(”保存完毕! \n”); fclose(fp); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 任务 学生 信息管理 系统