为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

C语言学生信息管理系统

2011-07-01 24页 doc 121KB 790阅读

用户头像

is_956511

暂无简介

举报
C语言学生信息管理系统C语言课程设计报告 C语言课程设计报告 学生姓名:田俊 学生学号:0909090610 所在班级: 电气信息0906 课程设计题目: 学生信息管理系统 1、​ 课程设计目标和要求: 巩固和加强《C语言程序设计》课程的理论知识。 掌握C语言的基本概念﹑语法﹑语义和数据类型的使用特点 学习并掌握C语言定义函数的基本方法、声明函数及调用函数的方法和过程。 掌握文件和文件指针的概念以及文件的定义方法,认识文件打开、关闭、读、写等文件基本操作函数。 了解指针和链表的概念,掌握指针的定义和使用指针变量的方法以及链表的正确用法。灵活使用链表...
C语言学生信息管理系统
C语言课程报告 C语言课程设计报告 学生姓名:田俊 学生学号:0909090610 所在班级: 电气信息0906 课程设计题目: 学生信息管理系统 1、​ 课程设计目标和: 巩固和加强《C语言程序设计》课程的理论知识。 掌握C语言的基本概念﹑语法﹑语义和数据类型的使用特点 学习并掌握C语言定义函数的基本方法、声明函数及调用函数的方法和过程。 掌握文件和文件指针的概念以及文件的定义方法,认识文件打开、关闭、读、写等文件基本操作函数。 了解指针和链的概念,掌握指针的定义和使用指针变量的方法以及链表的正确用法。灵活使用链表来储存学生信息。 掌握数组的定义、引用以及输入输出的方法、通过字符数组存储字符串,进一步使用字符串 培养创新能力和创新思维 培养良好的程序设计风格 2、​ 课程设计报告的需求分析 设计出来的学生信息管理系统要实现以下功能: A 系统以菜单方式工作; B学生信息的录入(并用文件保存) C 学生信息的浏览功能 D 查询(包括按学号和按姓名查询) E学生信息的查询和修改 F 有一定容错能力,在输入错误时提示不合法,并要求重新输入。 3、​ 程序的实现过程 1 总体的设计 通过菜单的形式,利用switch函数,将程序要实现的功能分为6个模块进行,然后分别对信息的录入,浏览,查询,修改,删除,和对出进行编写,并将信息写入文件,最后退出系统。 2 模块功能的说明 在设计的程序中,共设计了 Struct student//学生的结构体 welcome 通过一系列的输出函数,显示字符,以现实欢迎界面 main menu 通过 switch 函数 以选项的形式实现程序以菜单形式工作 record实现录入信息功能,分配内存空间,分别对 student 的结构体成员进行赋值并用链表指向这些成员 display 输出 学生的信息 displayAll 通过 do while 循环 分别输出所有学生的全部信息 query 实现查询的功能,通过switch 函数,进行选择(分别按学号进行查询调用 query_by_num 函数,按姓名进行查询,调用query_by_name 函数) Read data 读取文件 Write data 通过链表,将信息写入文件 Del 实现删除 学生信息的功能,并提示错误信息,(通过链表实现) Change 提示错误信息,用if else 实现,通过switch 函数 选择按 学号的方式修改或是通过( 调用devise函数) Tuichxitong 实现退出时的欢迎界面,并将学生信息存入文件,退出系统。 流程图: 调试与测试:如图, 首先,进入欢迎界面 然后进入主界面: 显示菜单选项 然后录入信息 浏览信息 查询信息 删除信息后 重新录入信息后再修改后浏览,得到修改后的信息, 最后退出系统。 测试结果: 经过上机调试,发现程序基本的功能都已实现,输入学生的信息,然后,修改,修改信息后存储到文件之中,删除信息等都得到了很好的实现。 当然,程序本身还存在一些细节问题:比如在输入学号的时候,当学号前第一个数字是0 的时候,在输出的时候没有显示0, 其次,在显示学生信息时,学生的各个信息并没有严格地对齐,使得界面不够美观。 : 在本次C语言课程设计的过程中,感受最深的是,我们培养了一种共同协作的能力。 在刚开始大家都还没有头绪的时候,大家都会抽出时间一起学习有关链表和文件的内容,共同探讨一些弄不懂的地方。为之后程序的设计打下了一个很好的基础。接下来是各个模块的实现,大家首先是针对各自比较熟悉的模块部分提出了自己的见解,写出自己的代码,然后马不停蹄地上机调试,对于自己一个人没能弄懂的地方,在自己提出来之后,大家都会很友好地提出自己所认为的解决,并相互磋商,在大家的共同努力下,终于完整地实现了学生管理系统的全部功能。 解决问题的能力得到了提高: 自然,做任何事,都或多或少难免会碰到些自己没办法解决的问题,同样,在整个程序设计的过程中,我也遇到了些不小的麻烦,首先就是有关文件的部分,由于在一开始自学文件整个部分时候,并没有将课本读的很透彻,以至在想办法将输入的信息以文件形式存储的时候,总是出现一些错误,本想着和小组里的同学讨论下该怎么解决这个问题,可是,想了想,觉得或许自己可以独立解决这个问题,于是硬着头皮,将课本上文件部分的内容又翻来翻去地看了好几遍,才发觉其实是自己的疏忽造成的。其实,有些时候,看似很难的问题,其实,多一点独立思考,也许就解决了。 另外,为了使整个程序趋于完美,我们也从网上找来了些类似 的程序,通过比较分析,发现了一些美中不足之处,然后,参照一些比较美观的程序界面做出了一些改进,使得学生管理系统的操作体验更好。这也使我明白,有时候,需要通过不断地比较才能从中找到差距,从而,不断改进,使得程序日趋完善。 4、​ 附录: 源程序如下: #include #include #include #include #include #define NULL 0 #define LEN sizeof(struct student) #define FILE_DATA_PATH "student.txt" struct student //建立一个学生的结构 { long int num; //学生人数 char name[20]; //学生姓名 int age; //年龄 char sex[4]; //性别 char birthday[10]; //生日 char address[30]; //地址 long int score; //成绩 char E_mail[20]; //邮箱 struct student *next; //指针指向学生结构 }; int TOTAL_NUM = 0; //初始化总人数为0 struct student *head = NULL; //指针指向的结构的首位为空 welcome(); mainmenu(); tuichuxitong(); record(); insert(struct student *stu); display(struct student *stu); displayAll(); query(); query_by_num(); query_by_name(); readData(); writeData(); freeAll(); del(); change(); devise(struct student *p); main() { welcome(); mainmenu(); } welcome() //显示欢迎信息 { system("color 2e"); printf("\n\n\n\n\n\n\n"); printf(" --------【学生信息管理系统】-------\n"); printf("\n"); printf("\n"); printf(" 制作人: 第一小组 \n"); printf("================================================================================\n"); printf(" ●☆☆ welcome ☆☆●\n"); printf("\n"); printf(" ★★★★★★★★★★★★★★ ★★★★★★★★★★★★★★\n"); printf("\n\n\n"); printf("\t\t\t+--+--+--+--+--+--+--+--+--+--+--+--+\n"); printf("\n\n\n\n\n\n\n\n\n"); system("pause"); system("cls"); } mainmenu() //系统主菜单 { system("color 3e"); int choice; choice = -1; readData(); printf("\n\n\n 温馨提示:为保证您的操作得到保存,请按正常顺序退出系统^_^\n"); do { printf("\n\n\t\t\t--------------------------------\n"); printf("\t\t\t| 学生信息管理系统 |\n"); printf("\t\t\t--------------------------------\n"); printf("\t\t\t| [1]----录入学生信息 |\n"); printf("\t\t\t| [2]----浏览学生信息 |\n"); printf("\t\t\t| [3]----查询学生信息 |\n"); printf("\t\t\t| [4]----删除学生信息 |\n"); printf("\t\t\t| [5]----修改学生信息 |\n"); printf("\t\t\t| [0]----退出系统 |\n"); printf("\t\t\t|*·*·*·*·*·*·*·*·*·*·|\n"); printf("\t\t\t--------------------------------\n"); printf("请输入您的选择:"); scanf("%d", &choice); switch(choice) { case 0: writeData(); freeAll(); tuichuxitong(); 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); } record() //录入学生信息 { system("cls"); struct student *p0; p0 = (struct student *)malloc(LEN); printf("\n\n\n"); printf(" 请输入学生的学号:"); scanf("%ld",&p0->num); printf("\n"); printf(" 请输入学生的姓名:"); scanf("%s",p0->name); printf("\n"); printf(" 请输入学生的年龄:"); scanf("%d",&p0->age); printf("\n"); printf(" 请输入学生的性别:"); scanf("%s",p0->sex); printf("\n"); printf(" 请输入学生的出生年月:"); scanf("%s",p0->birthday); printf("\n"); printf(" 请输入学生的地址:"); scanf("%s",p0->address); printf("\n"); printf(" 请输入学生的成绩:"); scanf("%ld",&p0->score); printf("\n"); printf(" 请输入学生的E-mail:"); scanf("%s",p0->E_mail); insert(p0); printf(" 该学生的信息为:\n"); printf("-------------------------------------------------------------------------------"); display(p0); system("pause"); system("cls"); mainmenu(); } 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++; } display(struct student *p) { printf("学号\t 姓名\t 年龄\t 性别\t 出生年月\t 地址\t 成绩\t E-mail\n"); printf("%ld\t %s\t %d\t %s\t %s\t %s\t %ld\t %s\n", p->num, p->name, p->age, p->sex, p->birthday, p->address, p->score, p->E_mail); } displayAll() //浏览学生信息 { struct student *p; system("cls"); printf("\n\n\n"); printf(" 学生总数:%d\n", TOTAL_NUM); p = head; if(head != NULL) { printf("-------------------------------------------------------------------------------"); do { display(p); p = p->next; } while(p != NULL); } printf("\n"); system("pause"); system("cls"); mainmenu(); } query() //查询学生信息 { int choice; choice = -1; system("cls"); do { printf("\n\n\n"); printf("\t\t+--------------------+\n"); printf("\t\t| [1]---按学号查询 |\n\n"); printf("\t\t| [2]---按姓名查询 |\n\n"); printf("\t\t| [0]---取 消 |\n"); printf("\t\t+--------------------+\n\n"); printf("\t\t请输入您的选择:"); scanf("%d", &choice); switch(choice) { case 0: system("cls"); mainmenu(); case 1: query_by_num(); system("pause"); system("cls"); query(); case 2: query_by_name(); system("pause"); system("cls"); query(); default: printf("\n无效选项!"); break; } } while(choice != 0); } query_by_num() //按学号查询学生信息 { int num; struct student *p1; printf("请输入学生的学号:"); scanf("%ld", &num); if(head==NULL) { printf("无学生记录!\n"); } p1=head; while(num!=p1->num && p1->next!=NULL) p1=p1->next; if(num == p1->num) { printf("-------------------------------------------------------------------------------"); display(p1); } else printf("没有该学生记录,请核对!"); } query_by_name() //按姓名查询学生信息 { char name[20]; 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("-------------------------------------------------------------------------------"); display(p1); } else printf("没有该学生记录,请核对!"); } writeData() //写入文件 { FILE* fp; struct student *p; fp = fopen(FILE_DATA_PATH, "w"); if (!fp) { return; } fprintf(fp,"%d\n", TOTAL_NUM); for(p = head; p!= NULL; p= p->next) { fprintf(fp,"学号%ld\t姓名%s\t年龄%d\t性别%s\t出生年月%s\t地址%s\t成绩%ld\tE-mail%s\n", p->num, p->name, p->age, p->sex, p->birthday, p->address, p->score, p->E_mail); } fclose(fp); } freeAll() { struct student *p1, *p2; p1=p2=head; while(p1) { p2=p1->next; free(p1); p1=p2; } } readData() //读取文件 { FILE* fp; struct student *p1, *p2; fp = fopen(FILE_DATA_PATH, "r"); if (!fp) { return; } fscanf(fp,"%d\n", &TOTAL_NUM); head = p1 = p2 = (struct student *)malloc(LEN); fscanf(fp,"%ld\t%s\t%d\t%s\t%s\t%s\t%ld\t%s\n", &p1->num, p1->name, &p1->age, p1->sex, p1->birthday, p1->address, &p1->score, p1->E_mail); while(!feof(fp)) { p1 = (struct student *)malloc(LEN); fscanf(fp,"%ld\t%s\t%d\t%s\t%s\t%s\t%ld\t%s\n", &p1->num, p1->name, &p1->age, p1->sex, p1->birthday, p1->address, &p1->score, p1->E_mail); p2->next = p1; p2 = p1; } p2->next = NULL; fclose(fp); } del() //删除学生信息 { struct student *p1, *p2; long int num; if(head == NULL) { printf("无学生记录!\n"); return; } printf("\n\n\t请输入您要删除的学生的学号:"); 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"); system("cls"); } change() //修改学生信息 { struct student *p1, *p2; long int num; system("cls"); 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"); } devise(struct student *p) { int choice; choice = -1; do { printf("\n 请选择您要修改的学生的信息内容:\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: system("cls"); mainmenu(); case 1: printf("\n\n 请输入新姓名:"); scanf("%s", p->name); system("pause"); system("cls"); break; case 2: printf("请输入新年龄:"); scanf("%d", &p->age); system("pause"); system("cls"); break; case 3: printf("请输入新性别:"); scanf("%s", p->sex); system("pause"); system("cls"); break; case 4: printf("请输入新出生年月:"); scanf("%s", p->birthday); system("pause"); system("cls"); break; case 5: printf("请输入新地址:"); scanf("%s", p->address); system("pause"); system("cls"); break; case 6: printf("请输入新成绩:"); scanf("%ld", &p->score); system("pause"); system("cls"); break; case 7: printf("请输入新E-mail:"); scanf("%s", p->E_mail); system("pause"); system("cls"); break; default: printf("\n无效选项!"); break; } }while(choice != 0); } tuichuxitong() { system("cls"); system("COLOR 3f"); printf("\n\n\n\n\n --------【学生信息管理系统】-------\n"); printf("\n"); printf("\n"); printf(" 制作人: 第一小组 \n"); printf("================================================================================\n"); printf(" ●☆☆Bye-Bye☆☆●\n"); printf("\n"); printf(" ★★★★★★★★★★★★★★ ★★★★★★★★★★★★★★\n"); printf("\n"); printf(" \n"); printf(" ☆☆☆☆☆☆☆☆☆☆☆\n"); printf("\n"); printf(" ★★★★★★★★★★★\n"); printf(" ★\n"); printf(" 中 ★ 电 \n"); printf(" ★ 气 \n"); printf(" 南 ★ 信 \n"); printf(" ★ 息 \n"); printf(" 大 ★ 0 \n"); printf(" ★ 9 \n"); printf(" 学 ★ 0 \n"); printf(" ★ 6 \n"); printf(" ★\n\n\n\n"); printf(" ◆谢谢使用◆\n"); }
/
本文档为【C语言学生信息管理系统】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索