欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    C语言课程设计学生信息管理系统方案.doc

    • 资源ID:4740984       资源大小:167.50KB        全文页数:15页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C语言课程设计学生信息管理系统方案.doc

    c语言及数据结构与算法课程设计题目 : 学生信息管理系统 专 业: 姓 名: 学 号: 同组其他学生(学号): 2013年月 日目 录一、需求分析3二、总体设计3三、详细设计5四、调试与测试6五、测试结果7六、用户手册9七、附录9一、需求分析每年九月份都有大量新生来到学校报道,使学校管理学生工作量增大,为此我们设计一学生信息管理系统,学生信息包括:学号,年龄,性别,出生年月,地址,E-mail等。使之能提供以下功能:(1)系统以菜单方式工作(2)学生信息录入功能-输入(3)学生信息浏览功能-输出(4)查询、排序功能-算法按学号查询、按查询、学生信息的删除与修改(可选项)二、总体设计组成框图主函数主菜单欢迎界面查询按姓名按学号录入删除浏览修改退出录入浏览查询开始密码是否正确主菜单1录入学生信息2浏览学生信息3-查询学生信息4-删除学生信息5-修改学生信息0-退出系统重新输入密码是否正确确删除修改退出结束流程图NYY 开始申请新空间输入各项数据显示数据结束开始录入 浏览指针p指向头结点P=p->next输出指针的数据 P=NULL?NY结束查询 修改&删除 输入要删除或修改的学号输入姓名或学号P指针的学号与输入的是否相同P=p->nextP指针的学号与姓名是否与输入的相同? NN Y Y输出数据 修改p的各项数据或将p=p->next结束结束 三、详细设计主函数通过在while循环结构中嵌入switch分支结构实现操作选择功能。(1)Record录入函数建立一个包含学生全部信息的结构体,申请空间,其指针为p0,存入学生各项对应的数据。(2)Insert插入函数:按输入的数据存储在一个stu类型的指针里,若原来链表里没有元素,则将此作为第一个元素;若原来的链表里有元素,则将指向头结点指针存储的学号与头指针下一个的学号大小进行比较,小的在前大的在后,之后指向头结点处的指正后移,进行比较,直到尾结点为止。在进行比较的while函数,每比较一次,计算总人数的TOTAL_NUM自加。(3)Display浏览函数:将传给Display函数的指针P所指向的结构体的各项数据输出以便核对信息。(4)DisplayAll浏览函数:指针指向链表头结点,在if语句中嵌套do-while语句将学生信息按学号从大到小进行逐一输出。(5)Query查询函数:首先使用switch语句生成菜单,实现操作选择功能。分三个部分按学号查询、按查询和取消返回上一层。按学号查询时调用while语句对学号检索,再调用if语句进行判断,最后输出想要查询的信息。按查询的方法跟按学号查询的一样。(6)Del删除函数:使用while语句进行检索,直接删除学生信息。(7)Change修改函数:建立devise函数,生成菜单,用switch语句进行分叉选择功能,选择项目进行相应的信息输入。在Change函数中使用while语句进行检索后再调用devise函数修改信息。实现学生信息修改。四、调试与测试1、进行多次运行,发现那栏的一打长就会显示一样的数字,打短的数字就可以。我们原本是使用长整型来定义,想说空间不够,后来改用字符型,用字符串记录程序运行结果正确。2、程序设计初就在考虑退出与返回有什么差别,如果返回了主菜单那退出用什么,关于这个问题看了许多网上的资料,发现许多程序都有exit(0)的函数,所以去查了不少关于exit的函数容,最后退出就用了exit(0),但是又提醒说要编写exit函数,之后发现要加入<stdlib.h>的头文件,程序可以正常运行。3、程序在180行显示说readData函数不可以返回值,所以在if条件句中将return 0删除了,不过这个程序在学校的机房即使不删return 0也是可以运行的,关于这点很是不解,还有待解决。五、测试结果1、进入系统界面,输入密码,超过三次会自动退出。2、选1时录入学生信息,编辑完后会继续显示菜单3、选2浏览学生信息 ,之后继续返回菜单界面,为节省空间菜单界面暂不截图4、选择3查询学生信息会有按学号与按查询。下图是先按学号查询的截图。5、按查询时,如果查无此人会显示“没有该学生信息,请核对。”之后返回上一层,按查询。显示学生信息后可以选择取消返回主菜单。6、选择4删除学生,输入学号删除学生的信息。之后会返回主菜单 7选择5修改学生信息,按学号输入,之后按显示输入即可。用几组测试数据进行测试算法设计的正确性。(附上程序运行的截图)六、用户手册1程序一开始会显示欢迎界面,按要求输入密码,3次错误会退出程序。2 密码正确后会显示主菜单,按要求输入您的需求。七、附录源程序清单和结果:源程序要加注释。结果要包括测试数据和运行结果。/* Note:Your choice is C IDE */#include <stdio.h>#include <malloc.h>#include <string.h>#include <io.h>#include <stdlib.h>#define NULL 0#define LEN sizeof(struct student)#define FILE_DATA_PATH "c:student.txt" struct student long int num; char name20; int age; char sex4; char birthday10; char address30; char tele_num13; char E_mail20; struct student *next;int TOTAL_NUM = 0;struct student *head = NULL;void welcome();void mainmenu();void record();void insert(struct student *stu);void display(struct student *stu);void displayAll();void query();void query_by_num();void query_by_name();void readData();void writeData();void freeAll();void del();void change();void devise(struct student *p);int main() char userPWD7; int i;welcome(); for(i = 0; i < 3; i+) printf("n密码为123n"); printf("n请输入您的密码:"); scanf("%s", userPWD); if (strcmp(userPWD,"123")=0) /密码正确,显示主菜单 mainmenu(); break; else if (i < 2) /用户名或密码错误,提示用户重新输入 printf("密码错误,请重新输入!"); else /连续3次输错用户名或密码,退出系统。 printf("您已连续3次将密码输错,系统将退出!"); return 0;/显示欢迎信息void welcome() printf("+n"); printf("| |n"); printf("| 欢迎使用学生信息管理系统 |n"); printf("| |n"); printf("+n");/系统主菜单void mainmenu() int choice; choice = -1; readData(); printf("n温馨提示:为保证您的操作得到保存,请按正常顺序退出系统_n"); do printf("nnn"); printf("ttt-n"); printf("ttt+ 学生信息管理系统 |n"); printf("ttt-n"); printf("ttt+ 1-录入学生信息 |n"); printf("ttt+ 2-浏览学生信息 |n"); printf("ttt+ 3-查询学生信息 |n"); printf("ttt+ 4-删除学生信息 |n"); printf("ttt+ 5-修改学生信息 |n"); printf("ttt+ 0-退出系统 |n"); printf("ttt-n"); printf("请输入您的选择:"); scanf("%d", &choice); switch(choice) case 0: writeData(); freeAll(); exit(0); case 1: record(); break; case 2: displayAll(); break; case 3: query(); break; case 4: del(); break; case 5: change(); break; default: printf("n无效选项!"); break; while(choice != 0);/录入学生信息void record() struct student *p0; p0 = (struct student *)malloc(LEN); printf("请输入学生的学号:"); scanf("%ld",&p0->num); printf("请输入学生的:"); scanf("%s",p0->name); printf("请输入学生的年龄:"); scanf("%d",&p0->age); printf("请输入学生的性别:"); scanf("%s",p0->sex); printf("请输入学生的出生年月:"); scanf("%s",p0->birthday); printf("请输入学生的地址:"); scanf("%s",p0->address); printf("请输入学生的:"); scanf("%s",p0->tele_num); printf("请输入学生的E-mail:"); scanf("%s",p0->E_mail); insert(p0); printf("该学生的信息为:n"); printf(""); printf("学号tt年龄t性别t出生年月tt地址ttE-mailn"); display(p0);void insert(struct student *stu)/根据学号对学生进行排序/ struct student *p0, *p1, *p2; p1 = head; p0 = stu; if(head = NULL) head = p0; p0->next = NULL; else while(p0->num > p1->num)&&(p1->next != NULL) p2 = p1; p1 = p1->next; if(p0->num <= p1->num) if(head = p1) head = p0; else p2->next = p0; p0->next = p1; else p1->next = p0; p0->next = NULL; TOTAL_NUM+;void display(struct student *p) printf("%ldt%st%dt%st%st%st%st%sn", p->num, p->name, p->age, p->sex, p->birthday, p->address, p->tele_num, p->E_mail);/浏览学生信息void displayAll() struct student *p; printf("学生总数:%dn", TOTAL_NUM); p = head; if(head != NULL) printf("n学号tt年龄t性别t出生年月t地址ttE-mailn"); printf(""); do display(p); p = p->next; while(p != NULL); printf("n");/查询学生信息void query() int choice; choice = -1; do printf("n"); printf("+-+n"); printf("| 按学号查询 请按 1 |n"); printf("| 按查询 请按 2 |n"); printf("| 取消 请按 0 |n"); printf("+-+n"); printf("请输入您的选择:"); scanf("%d", &choice); switch(choice) case 0: return; case 1:query_by_num();break; case 2:query_by_name(); break; default: printf("n无效选项!");break; while(choice != 0);/按学号查询学生信息void query_by_num() int num; struct student *p1; printf("请输入学生的学号:"); scanf("%ld", &num); if(head=NULL) printf("无学生记录!n"); return; p1=head; while(num!=p1->num && p1->next!=NULL) p1=p1->next; if(num = p1->num) printf("n学号tt年龄t性别t出生年月t地址ttE-mailn"); printf(""); display(p1); else printf("没有该学生记录,请核对!");/按查询学生信息void query_by_name() char name20; struct student *p1; printf("请输入学生的:"); scanf("%s", name); if(head=NULL) printf("无学生记录!n"); return; p1=head; while(strcmp(name, p1->name) && p1->next!=NULL) p1=p1->next; if(!strcmp(name, p1->name) printf("n学号tt年龄t性别t出生年月t地址ttE-mailn"); printf(""); display(p1); else printf("没有该学生记录,请核对!");/写入文件void writeData() FILE* fp;/文件指针 struct student *p; fp = fopen(FILE_DATA_PATH, "w"); if (!fp) printf("文件打开错误!"); return; fprintf(fp,"%dn", TOTAL_NUM); for(p = head; p!= NULL; p= p->next) fprintf(fp,"%ldt%st%dt%st%st%st%st%sn", p->num, p->name, p->age, p->sex, p->birthday, p->address, p->tele_num, p->E_mail); fclose(fp); void freeAll() struct student *p1, *p2; p1=p2=head; while(p1) p2=p1->next; free(p1); p1=p2; /读取文件void readData() FILE* fp;/文件指针 struct student *p1, *p2; fp = fopen(FILE_DATA_PATH, "r"); if (!fp) printf("文件打开错误!"); fscanf(fp,"%dn", &TOTAL_NUM); head = p1 = p2 = (struct student *)malloc(LEN); fscanf(fp,"%ldt%st%dt%st%st%st%st%sn", &p1->num, p1->name, &p1->age, p1->sex, p1->birthday, p1->address, &p1->tele_num, p1->E_mail); while(!feof(fp) p1 = (struct student *)malloc(LEN); fscanf(fp,"%ldt%st%dt%st%st%st%st%sn", &p1->num, p1->name, &p1->age, p1->sex, p1->birthday, p1->address, &p1->tele_num, p1->E_mail); p2->next = p1; p2 = p1; p2->next = NULL; fclose(fp);/删除学生信息void del() struct student *p1, *p2; long int num; if(head = NULL) printf("无学生记录!n"); return; printf("请输入您要删除的学生的学号:"); scanf("%ld", &num); p1 = head; while(num != p1->num && p1->next != NULL) p2=p1; p1=p1->next; if(num=p1->num) if(p1=head) head=p1->next; else p2->next=p1->next; free(p1); TOTAL_NUM-; else printf("没有该学生记录,请核对!n");/修改学生信息void change() struct student *p1, *p2; long int num; if(head = NULL) printf("无学生记录!n"); return; printf("请输入您要修改的学生的学号:"); scanf("%ld", &num); p1=head; while(num !=p1->num && p1->next != NULL) p2=p1; p1=p1->next; if(num=p1->num) devise(p1); else printf("没有该学生记录,请核对!n");void devise(struct student *p) int choice; choice=-1; do printf("请选择您要修改的学生的信息容:n"); printf("+-+n"); printf("| 请按 1 |n"); printf("| 年龄 请按 2 |n"); printf("| 性别 请按 3 |n"); printf("| 出生年月 请按 4 |n"); printf("| 地址 请按 5 |n"); printf("| 请按 6 |n"); printf("| E-mail 请按 7 |n"); printf("| 取消 请按 0 |n"); printf("+-+n"); printf("请输入您的选择:"); scanf("%d", &choice); switch(choice) case 0: return; case 1: printf("请输入新:"); scanf("%s", p->name); break; case 2: printf("请输入新年龄:"); scanf("%d", &p->age);break; case 3: printf("请输入新性别:"); scanf("%s", p->sex); break; case 4: printf("请输入新出生年月:"); scanf("%s", p->birthday); break; case 5: printf("请输入新地址:"); scanf("%s", p->address); break; case 6: printf("请输入新:"); scanf("%s", &p->tele_num); break; case 7: printf("请输入新E-mail:"); scanf("%s", p->E_mail); break; default:printf("n无效选项!"); break; while(choice != 0);

    注意事项

    本文(C语言课程设计学生信息管理系统方案.doc)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开