C语言学生信息管理系统
更新时间:2024-01-27 13:16:01 阅读量: 教育文库 文档下载
C语言课程设计报告
学生姓名:田俊学生学号:所在班级:
0909090610
电气信息0906
课程设计题目:
一、
学生信息管理系统
课程设计目标和要求:
巩固和加强《C语言程序设计》课程的理论知识。
掌握C语言的基本概念﹑语法﹑语义和数据类型的使用特点
学习并掌握C语言定义函数的基本方法、声明函数及调用函数的方法和过程。
掌握文件和文件指针的概念以及文件的定义方法,认识文件打开、关闭、读、写等文件基本操作函数。
了解指针和链表的概念,掌握指针的定义和使用指针变量的方法以及链表的正确用法。灵活使用链表来储存学生信息。
掌握数组的定义、引用以及输入输出的方法、通过字符数组存储字符串,进一步使用字符串
培养创新能力和创新思维 培养良好的程序设计风格
二、 课程设计报告的需求分析
设计出来的学生信息管理系统要实现以下功能:
A 系统以菜单方式工作;
B学生信息的录入(并用文件保存) C 学生信息的浏览功能
D 查询(包括按学号和按姓名查询) E学生信息的查询和修改
F 有一定容错能力,在输入错误时提示不合法,并要求重新输入。
三、 程序的实现过程
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语言课程设计的过程中,感受最深的是,我们培养了一种共同协作的能力。
在刚开始大家都还没有头绪的时候,大家都会抽出时间一起学习有关链表和文件的内容,共同探讨一些弄不懂的地方。为之后程序的设计打下了一个很好的基础。接下来是各个模块的实现,大家首先是针对各自比较熟悉的模块部分提出了自己的见解,写出自己的代码,然后马不停蹄地上机调试,对于自己一个人没能弄懂的地方,在自己提出来之后,大家都会很友好地提出自己所认为的解决方案,并相互磋商,在大家的共同努力下,终于完整地实现了学生管理系统的全部功能。 解决问题的能力得到了提高:
自然,做任何事,都或多或少难免会碰到些自己没办法解决的问题,同样,在整个程序设计的过程中,我也遇到了些不小的麻烦,首先就是有关文件的部分,由于在一开始自学文件整个部分时候,并没有将课本读的很透彻,以至在想办法将输入的信息以文件形式存储的时候,总是出现一些错误,本想着和小组里的同学讨论下该怎么解决这个问题,可是,想了想,觉得或许自己可以独立解决这个问题,于是硬着头皮,将课本上文件部分的内容又翻来翻去地看了好几遍,才发觉其实是自己的疏忽造成的。其实,有些时候,看似很难的问题,其实,多一点独立思考,也许就解决了。
另外,为了使整个程序趋于完美,我们也从网上找来了些类似 的程序,通过比较分析,发现了一些美中不足之处,然后,参照一些比较美观的程序界面做出了一些改进,使得学生管理系统的操作体验更好。这也使我明白,有时候,需要通过不断地比较才能从中找到差距,从而,不断改进,使得程序日趋完善。
四、 附录:
源程序如下:
#include
#include
#include
#include
#include
#define NULL 0
#define LEN sizeof(struct student)
#define FILE_DATA_PATH \
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(\
printf(\
printf(\【学生信息管理系统】-------\\n\printf(\printf(\
printf(\制作人: 第一小组 \\n\
printf(\;
printf(\●☆☆ welcome ☆☆●\\n\printf(\
printf(\★★★★★★★★★★★★★★ ★★★★★★★★★★★★★★\\n\
printf(\
printf(\
printf(\
system(\system(\}
mainmenu() //系统主菜单
{ system(\
int choice;
choice = -1;
readData();
printf(\温馨提示:为保证您的操作得到保存,请按正常顺序退出系统^_^\\n\ do {
printf(\
printf(\学生信息管理系统 |\\n\
printf(\
printf(\录入学生信息 |\\n\
printf(\浏览学生信息 |\\n\
printf(\查询学生信息 |\\n\
printf(\删除学生信息 |\\n\
printf(\修改学生信息 |\\n\
printf(\退出系统 |\\n\
printf(\·*·*·*·*·*·*·*·*·*·|\\n\
printf(\
printf(\请输入您的选择:\
scanf(\
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(\无效选项!\
break; } }
while(choice != 0); }
record() //录入学生信息
{ system(\
struct student *p0;
p0 = (struct student *)malloc(LEN);
printf(\
printf(\请输入学生的学号:\
scanf(\
printf(\
printf(\请输入学生的姓名:\
scanf(\
printf(\
printf(\请输入学生的年龄:\
scanf(\
printf(\
printf(\请输入学生的性别:\
scanf(\
printf(\
printf(\请输入学生的出生年月:\
scanf(\
printf(\
printf(\请输入学生的地址:\
scanf(\
printf(\
printf(\请输入学生的成绩:\
scanf(\
printf(\
printf(\请输入学生的E-mail:\
scanf(\
insert(p0);
printf(\该学生的信息为:\\n\
printf(\
display(p0); system(\system(\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(\p->birthday, p->address, p->score, p->E_mail); }
displayAll() //浏览学生信息 {
struct student *p;
system(\
printf(\
printf(\学生总数:%d\\n\
p = head;
if(head != NULL) {
printf(\ do {
display(p);
p = p->next; }
while(p != NULL); }
printf(\
system(\
system(\
mainmenu(); }
query() //查询学生信息 {
int choice;
choice = -1;
system(\ do {
printf(\
printf(\
printf(\按学号查询 |\\n\\n\
printf(\按姓名查询 |\\n\\n\
printf(\取 消 |\\n\
printf(\
printf(\请输入您的选择:\
scanf(\
switch(choice) {
case 0:
system(\mainmenu();
case 1:
query_by_num();
system(\
system(\
query();
case 2:
query_by_name();
system(\
system(\
query();
default:
printf(\无效选项!\
break; } }
while(choice != 0); }
query_by_num() //按学号查询学生信息 {
int num;
struct student *p1;
printf(\请输入学生的学号:\
scanf(\
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(\
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, \
if (!fp) {
return; }
fprintf(fp,\
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, \
if (!fp) {
return; }
fscanf(fp,\
head = p1 = p2 = (struct student *)malloc(LEN);
fscanf(fp,\
&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,\
&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(\请输入您要删除的学生的学号:\
scanf(\
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(\}
change() //修改学生信息 {
struct student *p1, *p2;
long int num;
system(\
if(head == NULL) {
printf(\无学生记录!\\n\
return; }
printf(\请输入您要修改的学生的学号:\
scanf(\
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\
printf(\
printf(\姓名 ____请按 1 *\\n\
printf(\年龄 ____请按 2 *\\n\
printf(\性别 ____请按 3 *\\n\
printf(\出生年月 ____请按 4 *\\n\
printf(\地址 ____请按 5 *\\n\
printf(\成绩 ____请按 6 *\\n\
printf(\请按 7 *\\n\
printf(\取消 ____请按 0 *\\n\
printf(\
printf(\请输入您的选择:\
scanf(\
switch(choice) {
case 0:
system(\
mainmenu();
case 1:
printf(\请输入新姓名:\
scanf(\
system(\
system(\
break;
case 2:
printf(\请输入新年龄:\
scanf(\
system(\
system(\
break;
case 3:
printf(\请输入新性别:\
scanf(\
system(\
system(\
break;
case 4:
printf(\请输入新出生年月:\
scanf(\
system(\
system(\
break;
case 5:
printf(\请输入新地址:\
scanf(\
system(\
system(\
break;
case 6:
printf(\请输入新成绩:\
scanf(\
system(\
system(\
break;
case 7:
printf(\请输入新E-mail:\
scanf(\
system(\
system(\
break;
default:
printf(\无效选项!\
break; }
}while(choice != 0); }
tuichuxitong() {
system(\ system(\
printf(\【学生信息管理系统】-------\\n\printf(\printf(\
printf(\制作人: 第一小组 \\n\
printf(\;
printf(\●☆☆Bye-Bye☆☆●\\n\printf(\
printf(\★★★★★★★★★★★★★★ ★★★★★★★★★★★★★★\\n\printf(\
printf(\
printf(\☆☆☆☆☆☆☆☆☆☆☆\\n\printf(\
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语言学生信息管理系统01-27
描写爱情的优美微小説11-21
2014级旅游管理对口单招班摸底考试试卷05-15
安全事故反思材料提纲(范本)06-18
小学数学从“植树问题”到“植树模型”教学策略课例研究报告10-29
2018-2024年软木垫片市场深度调查与市场运营趋势报告(目录)11-11
最美的生日祝福文章05-01
前期物业期间建设单位是否有权更换物业服务企业 - 图文03-12
老人生日祝福词02-24
安龙县中等职业学校体育工作自查报告10-16
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 管理系统
- 语言
- 学生
- 信息