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\}

本文来源:https://www.bwwdw.com/article/qikw.html

Top