赞
踩
由于计算机技术的飞速发展,C语言作为一项编程的基础语言,它对计算机行业有着很大的贡献,我们组计划用C语言编写一个学生信息管理系统,主要用来对学生基本信息的管理,使教师对学生信息进一步了解,为老师提供很好的了解渠道。
switch循环语句,参数的传递,字符串,数组,链表,指针,while语句,简单 输入输出语句,分支,函数定义,函数的递归调用
(1)数据管理:
要求:学生信息数据要以文件的形式保存,此模块包括子模块有:录入学生信息、删除学生信息、修改学生信息
(2)数据查询:
要求:查询时可实现按学号查询、按姓名查询
(3)数据浏览:
要求:输出录入信息的全部学生的基本信息
本系统需要实现的功能要求:
1) 利用switch语句设计如图1所示的主菜单:
录入学生信息
学生信息浏览
学生信息查询
修改学生信息
删除学生信息
退出学生管理系统
图1 学生信息管理系统主菜单
(2) 选择2后,程序自动为你提供全部学生信息
(3) 选择3后,进入学生信息查询阶段,可以根据学号和姓名查询学生成绩,也可以打印全部学生信息。
1.按学号查询
2.按姓名查询
3.打印全部学生信息
4.返回主菜单
图2:学生信息查询
(4) 选择4后,程序会根据你提供的学号自动为你找出该学生的信息,并问你需要改学生的哪一项信息,之后可以提供该学生的新的信息。
(5) 选择5后,程序可以根据你提供的学号删除对应的学生信息。
2.2学生信息管理系统的菜单
学生信息管理系统主模块如下:
学生信息管理系统的信息查询模块如下
程序代码设计
程序代码设计中的函数:
录入信息函数:void register()
浏览信息函数:void scan()
信息查询函数:void search()
修改信息函数:void modify()
删除信息函数:void del()
退出程序函数:void quit()
学生信息函数的定义:
char sno[max]; 学号
char sname[max]; 姓名
char age[max]; 年龄
char sex[max]; 性别
char born[max]; 出生年月
char dress[max]; 地址
char phone[max]; 电话
char mail[max]; E-mail
学生信息输出函数:
void ElePrint(char str[]) 单个元素
int LinePrint(student *ptr) 输出一行
void print() 输出全部学生信息
这三个函数是间接递归型
信息查询中的两个函数:
学号查询函数:no[max]
姓名查询函数:name[max]
信息修改中对信息从新输入的函数:
主要用于对新的信息的输入
name1[max] 修改后名字的函数
se1[max] 修改后性别的函数
ag1[max] 修改后年龄的函数
bor1[max] 修改后出生年月函数
dres1[max] 修改后地址函数
phon1[max] 修改后电话函数
mail1[max] 修改后E-mail函数
(1)学了一年的c语言了,本来以为自己对编程序有了一些了解,但是第一次接触这个程序的时候,我的感觉就是无从下手,看着如此复杂的程序,那时清楚的感受到自己的能力问题。我们利用了一天时间选了一道编程题,并简单的对它进行分析。首先,我们找到它的主程序,再根据主程序需要设计几个分支,利用参数传递的方法,使得我们的程序结构比较清晰,层次感比较分明。我们在编写的过程中充分引用我们学到的知识点,比如:数组,链表,switch语句,并让函数之间互相引用,减少一些繁琐的步骤。
(2)在编译的时候,遇到了不少问题,好多学过的知识点都有所遗忘,我们在学习的过程中也在不断的复习。在调试的时候,也有不少出错的地方,当时感觉真麻烦啊,然后就不断的翻资料,请教老师,同学。然后一点一点的找到错误的那种感觉也是挺好的
短短几天的实践周带给了我们很多的收获,学到了很多知识,也提高了自己的实际动手能力和独立思考能力。在实践中我们运用所学知识,发现,提出,分析和解决实际问题,并且也从中发现了我们的不足。C语言不仅仅是一门语言,它更是我们使用电脑的一种工具,能够帮助我们更好更快的解决问题,是一门实用性极强的课程,掌握并且熟练地使用它将会是我们计算机专业的学生必须要做的。通过这次课程设计,使我们懂得了理论和实践相结合很重要,从理论中得出结论,加深对C语言的理解,提升自己的编程思想,丰富经验。
在做设计的时候,最重要的是团队的力量,小组内成员互相交流,查漏补缺,反复修改完善,运用集体的智慧,团结合作解决问题。所以,通过这些天的努力和老师的指导帮助,我们终于做出了这个学生信息管理系统。在此过程中,我们体会到了团队合作的重要性,同时我们各方面的能力也得到了提升,也许在以后的学习生活中我们会做的更好。
[1]施荣华,刘卫国.C程序设计与应用.北京:中国铁道出版社,1999.
[2]向南平.实用C语言程序设计.长沙:中南工业大学出版社,1994
#include<stdio.h> #include<string.h> #include<stdlib.h> #define max 20 typedef struct student //学生信息输入 (结构体类型名) { char sno[max]; // 学号 char sname[max]; //姓名 char age[max]; //年龄 char sex[max]; //性别 char born[max];//出生年月 char dress[max];//地址 char phone[max];//电话 char mail[max];//E-mail struct student *next; } student; //“;”不能省略 student属于结构体变量 student *head; //输出链表,用头指针作为参数 void ElePrint(char str[]) //输出单个元素 ,定义一个str[]; { if(str==NULL) //如果str是空指针 ,判断str字符串是否存在 exit(0); //正常状态退出 printf("%s",str); //输出信息 for(unsigned int i=2;i<12-strlen(str);i++) //strlen函数可以返回字符串的函数 “i”用来控制两个信息之间的间距 printf(" ");//为了对齐输出,需插入一些空格 控制信息之间的距离 return; } int LinePrint(student *ptr) //输出一行 ,后边会引用 { if(ptr==NULL) //检查传进来的指针 ,判断ptr字符串是否存在 exit(0);//使用“return 0;”也行,作用是正常状态退出 printf("\n"); ElePrint(ptr->sno); //利用参数传递,利用指向结构体的指针变量引用结构体成员 ElePrint(ptr->sname); ElePrint(ptr->age); ElePrint(ptr->sex); ElePrint(ptr->born); ElePrint(ptr->dress); ElePrint(ptr->phone); ElePrint(ptr->mail); return 1; } void print() //输出全部学生信息 ,后边会引用 { student *ptr=head; //*ptr表示取该地址处储存的变量的值 printf("\n学号\t姓名\t 年龄\t 性别 出生年月\t地址\t 电话\t E-mail"); while(ptr) { LinePrint(ptr); //参数传递 ptr=ptr->next; //表示输出下一个学生的信息 } printf("\n"); return; } void regist() //1.录入学生信息 { system("cls");//清屏 char ch; //用来判断是否继续录入 student *s,*ptr; //s用来建新结点,ptr用来暂存头结点 do { s=(student*)malloc(sizeof(student)); // 新建一个学生结点 printf("\n开始录入学生信息..."); //开始录入 printf("\n请输入该学生的学号:"); scanf("%s",s->sno); //把sno的值录入新的节点s中 printf("\n请输入该学生的姓名:"); scanf("%s",s->sname); printf("\n请输入该学生的年龄:"); scanf("%s",s->age); printf("\n请输入学生的性别:"); scanf("%s",s->sex); printf("\n请输入学生的出生年月:"); scanf("%s",s->born); printf("\n请输入学生的地址:"); scanf("%s",s->dress); printf("\n请输入学生的电话:"); scanf("%s",s->phone); printf("\n请输入学生的E-mail:"); scanf("%s",s->mail); ptr=head; head=s;//将新结点插入队头 s->next=ptr; fflush(stdin); //清空输入缓存区 printf("\n请问是否继续录入?(Y/N)"); scanf("%c",&ch); } while(ch=='Y'||ch=='y'); return; } void scan()//2.浏览信息 { system("cls"); //清屏 printf("*提供全部学生信息*") ; print(); //直接引用“void print()”函数 } void search()//3.查询模块 { system("cls");//清屏 int method;//查询方式 char no[max],name[max];//用来接收查询关键字 while(1) { printf("\n请选择查询方式"); printf("\n1.按学号查询");//用到上边定义的no[max] printf("\n2.按姓名查询"); //用到上边定义的name[max]; printf("\n3.打印全部学生信息"); printf("\n4.返回主菜单\n"); scanf("%d",&method); student *p=head,*temp; switch(method) { case 1: printf("\n请输入要查询的学号:"); scanf("%s",no); while(p) { if(!strcmp(p->sno,no)) //“strcmp”是字符串比较函数,比较系统中的学号跟你输入的学号是否相等 break; else { temp=p; p=p->next; } } printf("\n学号\t姓名\t 年龄\t 性别 出生年月\t地址\t 电话\t E-mail"); LinePrint(p); break; case 2: printf("\n请输入学生的姓名:"); scanf("%s",name); printf("\n学号\t姓名\t 年龄\t 性别 出生年月\t地址\t 电话\t E-mail"); while(p) { if(!strcmp(p->sname,name));//“strcmp”是字符串比较函数,比较系统中的姓名跟你输入的姓名是否相等 LinePrint(p); p=p->next ; } break; case 3: print(); //输出所有学生的所有信息 break; case 4: return; //直接返回主菜单 default: printf("很抱歉,暂无此查询方式!"); break; } } } void modify()//4.修改学生信息 { system("cls");//清屏 char num[max]; //定义一个num数组 student *p=head; printf("\n请输入要修改的学生的学号:"); scanf("%s",num); while(p) { if(!strcmp(p->sno,num)) break; //如果sno跟num的字符串长度一样 ,使用break函数直接转至第168行 else p=p->next; //用strcmp将num一个一个跟sno比较 } if(p==NULL) //判断p是否存在 { printf("\n错误:没有此学生的信息!\n"); return; //退出修改学生信息界面 } LinePrint(p); printf("\n请输入要修改的该学生的信息:"); printf("\n1.姓名"); printf("\n2.年龄"); printf("\n3.性别"); printf("\n4.出生年月"); printf("\n5.地址"); printf("\n6.电话"); printf("\n7.E-mail"); char name1[max],se1[max],ag1[max]; char bor1[max],dres1[max],phon1[max],mail1[max]; int select; fflush(stdin); //清空输入缓存区 printf("\n"); printf("你选择的是:"); scanf("%d",&select); printf("\n请输入新的信息:"); switch(select) { case 1: scanf("%s",name1); strcpy(p->sname,name1); //strcpy是复制函数,将新输入的信息“name1”复制到sname中 break; case 2: scanf("%s",se1); strcpy(p->sex,se1); //同上 break; case 3: scanf("%s",ag1); strcpy(p->age,ag1); //同上 break; case 4: scanf("%s",bor1); strcpy(p->born,bor1); //同上 break; case 5: scanf("%s",dres1); strcpy(p->dress,dres1); //同上 break; case 6: scanf("%s",phon1); strcpy(p->phone,phon1); //同上 break; case 7: scanf("%s",mail1); strcpy(p->mail,mail1); //同上 break; default: printf("\nError!"); break; } // LinePrint(p); return; //返回主菜单 } void del()// 5.删除某学生的信息 { system("cls");//清屏 student *p=head,*temp=head,*s; char num1[max]; printf("\n请输入要删除的学生的学号:"); scanf("%s",num1); while(p)//查找该学生所在的结点 { if(!strcmp(p->sno,num1)) //strcmp是比较函数 break; //如果能查找到该学生所在节点,转至242行,输出此学生信息 else { temp=p; p=p->next; } }//while if(p==NULL) //判断是否存在 { printf("\n不存在此学生的信息."); return; } LinePrint(p);//输出该学生的信息 printf("\n请问真的要删除该学生的信息吗?(Y/N)"); char ch; fflush(stdin); //清除输入缓存区 scanf("%c",&ch); if(ch=='Y'||ch=='y') { s=p->next; temp->next=s; free(p); //释放p中的信息 printf("\n已经删除该学生的信息."); } return; //返回主菜单 } void quit() //6.退出程序 { system("cls"); char ch; printf("\n真的要退出?(Y/N)"); fflush(stdin); //清空输入缓存区 scanf("%c",&ch); if(ch=='Y'||ch=='y') exit(0); //正常退出 return; //返回主菜单 } int main() //主程序 { int option; printf("\n\tWelcome to the student information management system!\n"); printf("\n\t\t欢迎使用学生信息管理系统!\n"); //系统界面 while(1) { system("color 2f"); printf("\n\t\t* * * * * * * * * * * * * *"); printf("\n\t\t* 请选择需要的服务: *"); printf("\n\t\t* *"); printf("\n\t\t* 1.录入学生信息 *"); printf("\n\t\t* 2.学生信息浏览 *"); printf("\n\t\t* 3.学生信息查询 *"); printf("\n\t\t* 4.修改学生信息 *"); printf("\n\t\t* 5.删除学生信息 *"); printf("\n\t\t* 6.退出学生管理系统 *"); printf("\n\t\t* *"); printf("\n\t\t* * * * * * * * * * * * * *"); printf("\n\t\t 你选择的是:"); scanf("%d",&option); //option是提供选择 switch(option) { case 1: regist(); system("cls"); break; case 2: scan(); break; case 3: search(); system("cls"); break; case 4: modify(); system("cls"); break; case 5: del(); system("cls"); break; case 6: quit(); system("cls"); break; } } return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。