C语言课程设计-学生学籍管理系统源码
主要内容:
开发一个简单的学生学籍管理系统 ,实现以下功能:
【基本功能】
- 实现学院、专业和班级信息的维护管理。
- 实现学生信息的维护管理。
- 实现学生学籍信息的维护管理。
- 实现学生学籍信息的查询管理。
【扩展功能】
可以按照自己对学生学籍管理系统的需求理解进行扩展。比如:(1)权限处理 (2)模糊查询(3)综合查询(4)统计功能等。总之,可以根据自己的需求分析进行功能扩展。
任务要求:
一、提交材料应包括:(1)系统源代码 (2)课程报告
二、整个设计过程具体要求
(1)需求分析 要求学生对案例系统进行分析,设计出需要完成的功能,完善各个模块的调用关系;
(2)设计过程 要求学生进一步明确各模块调用关系,进一步完善模块函数细节(函数名、参数、返回值等);
(3)实现过程 要求学生养成良好的编码习惯、完成各个模块并进行测试,最终完成系统整体测试;
(4)总结阶段 按照要求完成系统设计和实现报告,并进行总结、答辩。
源码:
myproject.h
#include<stdio.h> #include<stdlib.h> #include<string.h> #define LEN 16//最大字符数,可根据实际修改 struct student {
char StudentId[LEN]; //学生学号 char StudentName[LEN]; //学生姓名 char StudentAge[LEN]; //学生年龄 char StudentSex[LEN]; //学生性别 char StudentCollege[LEN]; //学生学院 char StudentMajor[LEN]; //学生专业 char StudentClass[LEN]; //学生班级 char StudentTelephoneNumber[LEN]; //学生电话 struct student *next; }*head,*p,*q,*p1,*p2,*q1,*q2;//head表示开头,*p,*q,*p1,*p2,*q1,*q2是在函数中用到的结构体指针 void Add(void); //增添函数 void Delete(void); //删除函数 void Seek(void); //查找函数 void Modify(void); //修改函数 void Browse(void); //浏览函数 void Statistics(void); //统计函数 void Save(void); //保存函数 void Read(void); //读取函数
Main.c
#include"myproject.h" int n = 0;//n用来记录学生信息数据输入量 int main(void) {
system("color 0F");//背景色为黑色,前景色为亮白色 int a=1;//main中两个循环的执行条件和switch的表达式 char acc[16],pas[16]; while(a!=0)//a判断循环的执行 {
system("cls"); printf("★请输入账号:\n"); scanf("%s",acc); printf("★请输入密码:\n"); scanf("%s",pas); if((strcmp(acc,"admin")==0)&&(strcmp(pas,"")==0)) {
system("cls"); printf("欢迎使用学生学籍管理系统\n"); printf("\n★第一次进入系统请先保存学生信息建立相关文档!★\n"); printf("\n★每次使用该系统时请读取学生信息以便对其操作!★\n"); printf("\n★每次退出该系统时请保存学生信息一方数据丢失!★\n"); printf("\n★请按系统显示序号正确输入,否则将会出现错误!★\n"); printf("\n★系统还有很多功能有待完善,欢迎联系提供意见!★\n\n"); system("pause"); while(a!=0) {
system("cls"); printf(" 学 生 学 籍 管 理 系 统 \n"); printf("* ★1.增加学生信息 *\n"); printf("* ★2.显示学生信息 *\n"); printf("* ★3.查找学生信息 *\n"); printf("* ★4.删除学生信息 *\n"); printf("* ★5.修改学生信息 *\n"); printf("* ★6.统计学生信息 *\n"); printf("* ★7.读取学生信息 *\n"); printf("* ★8.保存学生信息 *\n"); printf("* ★0.退出学生系统 *\n"); printf("\n"); printf(" 请从序号0-8中选择:"); scanf("%d",&a); if(a>=0 && a<=8) {
switch(a)//a控制子函数的调用 {
case 1: Add();break; case 2: Browse();break; case 3: Seek();break; case 4: Delete();break; case 5: Modify();break; case 6: Statistics();break; case 7: Read();break; case 8: Save();break; } } else//a的值输入错误 {
printf("★您的输入错误,将返回主菜单!★\n"); system("pause"); } } } else//账号密码输入错误 {
printf("★账号或密码输入错误,请再次尝试!★\n"); system("pause"); } } return 0; }
Add.c
#include"myproject.h" extern int n; void Add(void) {
p1=(struct student *)malloc(sizeof(struct student));//动态内存分配 int m; printf("*输入样例: lihua 20 M xinxixueyuan jisuanji jike2001 *\n"); printf("*请 不 要 重 复 输 入 学 号 哦 !*\n"); if(n==0) {
head=p1; printf("学生学号:"); scanf("%s",&p1->StudentId); } else {
p2->next=p1; loop: printf("学生学号:"); scanf("%s",&p1->StudentId); q=head; m = n; while(m--)//m控制循环次数 {
if(strcmp(p1->StudentId,q->StudentId)==0) {
printf("\n您输入的学号重复,请重新输入!\n"); goto loop; } q=q->next; } } printf("学生姓名:"); scanf("%s",&p1->StudentName); printf("学生年龄:"); scanf("%s",&p1->StudentAge); printf("学生性别:"); scanf("%s",&p1->StudentSex); printf("学生学院:"); scanf("%s",&p1->StudentCollege); printf("学生专业:"); scanf("%s",&p1->StudentMajor); printf("学生班级:"); scanf("%s",&p1->StudentClass); printf("学生电话:"); scanf("%s",&p1->StudentTelephoneNumber); p2=p1; //p2指向p1所在的地址 p2->next=NULL; //链表结束标志 n++; //n用于记录数据输入量 system("pause"); //系统暂停函数 system("cls"); //系统清屏函数 }
Delete.c
#include"myproject.h" extern int n; void Delete(void) {
if(n!=0) {
char a[LEN]; int flag=0;//flag为标志变量,用于判断输入学号后是否能正常操作 printf("请输入要删除的学号:"); scanf("%s",&a); p=head; if(strcmp(head->StudentId,a)==0) {
q1=head; head=head->next; free(q1);//释放该内存地址 flag=1; } else {
p=head; do {
if(strcmp(p->StudentId,a)==0) {
q1=p; q2->next=p->next; free(q1); flag=1; break; } q2=p; //q2暂时指向p,之后p再指向下一个节点,如果这个是要删除的节点那么q2指向这个节点的next的地址 p=p->next; }while(p!=NULL); } if(flag==0)//对输入学号进行判断 {
printf("\n★学号输入有误,返回主菜单!★\n"); } else {
printf("\n★数据已经被删除!★\n"); n--; } } else {
printf("\n★出错啦,还没有添加数据呢!★\n"); } system("pause"); system("cls"); }
Seek.c
#include"myproject.h" extern int n; void Seek(void) {
int b,flag=0;//flag为标志变量,用于判断输入学号后是否能正常操作 char a[LEN]; if(n!=0) {
printf("\n1.按学号查找:\n"); printf("2.按学院查找:\n"); printf("3.按专业查找:\n"); printf("4.按班级查找:\n"); printf("请从序号1-4中选择:"); scanf("%d",&b); if(b>=1 && b<=4) {
printf("请输入要查找的名称:"); scanf("%s",&a); p=head;//指针指向开头 switch(b) {
case 1://按学号查找 do {
if(strcmp(a,p->StudentId)==0) {
printf("\n信息已被找到:\n学号\t\t姓名\t\t年龄\t性别\t学院\t\t专业\t\t班级\t\t电话\n"); printf("%-16s%-16s%-8s%-8s%-16s%-16s%-16s%-16s\n",p->StudentId,p->StudentName,p->StudentAge,p->StudentSex,p->StudentCollege,p->StudentMajor,p->StudentClass,p->StudentTelephoneNumber); flag=1; } p=p->next;//指针指向下一个节点 }while(p!=NULL); break; case 2://按学院查找 do {
if(strcmp(a,p->StudentCollege)==0) {
printf("\n学号\t\t姓名\t\t年龄\t性别\t学院\t\t专业\t\t班级\t\t电话\n"); printf("%-16s%-16s%-8s%-8s%-16s%-16s%-16s%-16s\n",p->StudentId,p->StudentName,p->StudentAge,p->StudentSex,p->StudentCollege,p->StudentMajor,p->StudentClass,p->StudentTelephoneNumber); flag=1; } p=p->next; }while(p!=NULL); break; case 3://按专业查找 do {
if(strcmp(a,p->StudentMajor)==0) {
printf("\n学号\t\t姓名\t\t年龄\t性别\t学院\t\t专业\t\t班级\t\t电话\n"); printf("%-16s%-16s%-8s%-8s%-16s%-16s%-16s%-16s\n",p->StudentId,p->StudentName,p->StudentAge,p->StudentSex,p->StudentCollege,p->StudentMajor,p->StudentClass,p->StudentTelephoneNumber); flag=1; } p=p->next; }while(p!=NULL); break; case 4://按班级查找 do {
if(strcmp(a,p->StudentClass)==0) {
printf("\n学号\t\t姓名\t\t年龄\t性别\t学院\t\t专业\t\t班级\t\t电话\n"); printf("%-16s%-16s%-8s%-8s%-16s%-16s%-16s%-16s\n",p->StudentId,p->StudentName,p->StudentAge,p->StudentSex,p->StudentCollege,p->StudentMajor,p->StudentClass,p->StudentTelephoneNumber); flag=1; } p=p->next; }while(p!=NULL); break; } system("pause"); if(flag==0)//a的值输入错误 {
printf("\n★输入有误,返回主菜单!★\n"); system("pause"); } } else//b的值输入错误 {
printf("★输入错误,返回主菜单!★\n"); system("pause"); } } else//未添加数据 {
printf("\n★出错啦,还没有添加数据呢!★\n"); system("pause"); } }
Modify.c
#include"myproject.h" extern int n; void Modify(void) {
if(n!=0) {
int b,flag=0;//flag为标志变量,用于判断输入学号后是否能正常操作 char a[LEN]; printf("请输入要修改的学号:"); scanf("%s",&a); p=head; do {
if(strcmp(a,p->StudentId)==0) {
printf("\n被修改人信息如下:\n学号\t\t姓名\t\t年龄\t性别\t学院\t\t专业\t\t班级\t\t电话\n"); printf("%-16s%-16s%-8s%-8s%-16s%-16s%-16s%-16s\n",p->StudentId,p->StudentName,p->StudentAge,p->StudentSex,p->StudentCollege,p->StudentMajor,p->StudentClass,p->StudentTelephoneNumber); flag=1; break; } p=p->next; }while(p!=NULL); if(flag==0) {
printf("\n★学号输入有误,返回主菜单!★\n"); } else {
printf("\n\n1.修改学号\n2.修改姓名\n3.修改年龄\n4.修改性别\n5.修改学院\n6.修改专业\n7.修改班级\n8.修改电话\n9.退出修改\n\n"); scanf("%d",&b); switch(b) {
case 1: printf("学号修改为:"); scanf("%s",&p->StudentId);break; case 2: printf("姓名修改为:"); scanf("%s",&p->StudentName);break; case 3: printf("年龄修改为:"); scanf("%s",&p->StudentAge);break; case 4: printf("性别修改为:"); scanf("%s",&p->StudentSex);break; case 5: printf("学院修改为:"); scanf("%s",&p->StudentCollege);break; case 6: printf("专业修改为:"); scanf("%s",&p->StudentMajor);break; case 7: printf("班级修改为:"); scanf("%s",&p->StudentClass);break; case 8: printf("电话修改为:"); scanf("%s",&p->StudentTelephoneNumber);break; case 9: break; } printf("\n\n★操作成功!★\n\n"); } } else {
printf("\n★出错啦,还没有添加数据呢!★\n"); } system("pause"); system("cls"); }
SaveRead.c
#include"myproject.h" extern int n; void Save(void) {
FILE *fp; if((fp=fopen("studentdata.txt","wb"))==NULL)//只写打开或新建一个二进制文件,只允许写数据 {
printf("\n错误,无法打开文件!\n"); exit(0); } p=head; while(p!=NULL) {
if(fwrite(p,sizeof(struct student),1,fp)!=1)//将数据写入文件 {
printf("\n写入数据出错\n"); fclose(fp); break; } p=p->next; } fclose(fp);//文件关闭 printf("\n★存储完成★\n"); system("pause"); system("cls"); } void Read(void) {
FILE *fp; if((fp=fopen("studentdata.txt","rb+"))==NULL)//读写打开一个二进制文件,允许读数据 {
printf("\n错误,无法打开文件!\n"); exit(0); } do {
p1=malloc(sizeof(struct student)); if(n==0)//判断链表开头 {
head=p1; } else {
p2->next=p1; //p2的结尾所指向的地址是p1 } fread(p1,sizeof(struct student),1,fp);//对文件数据进行读取 p2=p1; n++; }while(p2->next!=NULL); fclose(fp); printf("\n★读取完成!★\n"); system("pause"); system("cls"); }
Statistics.c
#include"myproject.h" extern int n; void Statistics(void) {
int c,d=0; char a[LEN]; printf("\n当前已存储%d个学生的学籍信息!\n",n); printf("请输入你想统计的人数:\n"); printf("1:统计学院人数\n"); printf("2:统计专业人数\n"); printf("3:统计班级人数\n"); scanf("%d",&c); if(c>=1&&c<=3) {
printf("请输入要统计的名称:"); scanf("%s",a); p=head; switch(c) {
case 1://统计学院人数 do {
if(strcmp(a,p->StudentCollege)==0) {
d++; } p=p->next; }while(p!=NULL); break; case 2://统计专业人数 do {
if(strcmp(a,p->StudentMajor)==0) {
d++; } p=p->next; }while(p!=NULL); break; case 3://统计班级人数 do {
if(strcmp(a,p->StudentClass)==0) {
d++; } p=p->next; }while(p!=NULL); break; } printf("统计得到人数为%d人\n",d); system("pause"); } else {
printf("★输入错误,返回主菜单!!★\n"); system("pause"); } }
Browse.c
#include"myproject.h" extern int n; void Browse(void) {
if(n!=0) {
p=head;//p先指向开头 printf("学号\t\t姓名\t\t年龄\t性别\t学院\t\t专业\t\t班级\t\t电话\n");//\t为水平制表符,相当于8个空格 do {
printf("%-16s%-16s%-8s%-8s%-16s%-16s%-16s%-16s\n",p->StudentId,p->StudentName,p->StudentAge,p->StudentSex,p->StudentCollege,p->StudentMajor,p->StudentClass,p->StudentTelephoneNumber); p=p->next;//p打印结束 把p指向next以判断下一个区域有没有内容 }while(p!=NULL);//只要p指向的内存区域有数据,就打印内容 } else {
printf("\n★还没有添加数据呢!★\n"); } system("pause"); system("cls"); }
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/168043.html