#include <stdio.h>
#include <string.h>
#include <windows.h>

struct student
{
long int num
char name[20]
int age
char sex[4]
char b[30]
char p[15]
}
int n=0
struct student stu[100]
struct student *p
void lr()
void ll()
void cx()
void xg()
void sc()
void main()
{
int z
printf("+---------------------------+n")
printf("| 欢迎使用学生信息管理系统 |n")
printf("+---------------------------+n")
printf("提示:为保证您的操作得到保存,请按正常顺序退出系统^_^n")
do
{
printf("nttt--------------------------------n")
printf("ttt+主菜单|n")
printf("ttt--------------------------------n")
printf("ttt+[1]----录入学生信息 |n")
printf("ttt+[2]----浏览学生信息 |n")
printf("ttt+[3]----查询学生信息 |n")
printf("ttt+[4]----删除学生信息 |n")
printf("ttt+[5]----修改学生信息 |n")
printf("ttt+[0]----退出系统 |n")
printf("ttt--------------------------------n")
printf("请输入您的选择:")
scanf("%d", &z)
system("color 2f")
switch(z)
{
case 0 :break
case 1 :lr()break
case 2 :ll()break
case 3 :cx()break
case 4 :sc()break
case 5 :xg()break
default:printf("n无效选项!")
}
}
while(z!= 0)
}
void lr()
{
int y
if(n==0)
p=stu
do
{
printf("--------------------n")
printf("请输入学生的学号:")
scanf("%ld",&p->num)
printf("请输入学生的姓名:")
scanf("%s",p->name)
printf("请输入学生的年龄:")
scanf("%d",&p->age)
printf("请输入学生的性别:")
scanf("%s",p->sex)
printf("请输入学生的地址:")
scanf("%s",p->b)
printf("请输入学生的电话:")
scanf("%s",p->p)
n++
p++
printf("n1.继续输入.n0.输入完毕.n")
printf("请选择:")
scanf("%d",&y)
}
while(y==1)
printf("提示:输入完毕!你一共输入%d个n",n)
}
void ll()
{
int i,j
if(n!=0)
{ printf("学生总数:%dn", n)
printf("学号t姓名t年龄t性别t地址tt电话n")
printf("-----------------------------------------------------n")
for(i=0i<ni++)
printf("%ldt%st%dt%st%stt%sn",stu[i].num,stu[i].name,stu[i].age,stu[i].sex,stu[i].b,stu[i].p)
}
else printf("提示:无学生数据,请输入数据!")
}
void cx()
{
int c
int w,i,j=0
char name[20]
if(n!=0)
{
do{printf("n")
printf("+--------------------+n")
printf("| 按学号查询 请按 1 |n")
printf("| 按姓名查询 请按 2 |n")
printf("| 取消请按 0 |n")
printf("+--------------------+n")
printf("请输入您的选择:")
scanf("%d", &c)
switch(c)
{
case 0:break
case 1:
printf("请输入学生的学号")
scanf("%ld", &w)
printf("n")
for(i=0i<ni++)
if(stu[i].num==w)
{
printf("n学号t姓名t年龄t性别t地址tt电话n")
printf("%ldt%st%dt%st%stt%sn",stu[i].num,stu[i].name,stu[i].age,stu[i].sex,stu[i].b,stu[i].p)
j=1
}
if(j==0)
printf("提示:没有该学生记录,请核对!")
break
case 2:
printf("请输入学生的姓名:")
scanf("%s", name)
printf("n")
for(i=0i<ni++)
if(strcmp(name,stu[i].name)==0)
{
printf("n学号t姓名t年龄t性别t地址tt电话n")
j=1
printf("%ldt%st%dt%st%stt%sn",stu[i].num,stu[i].name,stu[i].age,stu[i].sex,stu[i].b,stu[i].p)
}
if(j==0)
printf("提示:没有该学生记录,请核对!")
break
default:
printf("n提示:无效选项!")
break
}
}while(c!= 0)
}else printf("提示:无学生数据,请输入数据!")
return
}
void xg()
{
long int num
int i,j,c
if(n!=0)
{
printf("请输入您要修改的学生的学号:")
scanf("%ld", &num)
printf("n")
for(i=0i<ni++)
if(stu[i].num==num)
j=i
do{
printf("请选择您要修改的学生的信息内容:n")
printf("+----------------------+n")
printf("| 姓名 请按 1 |n")
printf("| 年龄 请按 2 |n")
printf("| 性别 请按 3 |n")
printf("| 学号 请按 4 |n")
printf("| 地址 请按 5 |n")
printf("| 电话 请按 6 |n")
printf("| 取消 请按 0 |n")
printf("+----------------------+n")
printf("请输入您的选择:")
scanf("%d", &c)
printf("n")
switch(c)
{
case 0:break
case 1:printf("请输入新姓名:")
scanf("%s",stu[j].name)
break
case 2:printf("请输入新年龄:")
scanf("%d",&stu[j].age)
break
case 3:printf("请输入新性别:")
scanf("%s",stu[j].sex)
break
case 4:printf("请输入新学号:")
scanf("%ld",&stu[j].num)
break
case 5:printf("请输入新地址:")
scanf("%s",stu[j].b)
break
case 6:printf("请输入新电话:")
scanf("%s",stu[j].p)
break
default:
printf("n无效选项!")
break
}
}while(c!= 0)
}else printf("提示:无学生数据,请输入数据!")
}
void sc()
{
long int num
int i,j,e
if(n!=0)
{
printf("学号t姓名t年龄t性别t地址tt电话n")
printf("-----------------------------------------------------n")
for(i=0i<ni++)
printf("%ldt%st%dt%st%stt%sn",stu[i].num,stu[i].name,stu[i].age,stu[i].sex,stu[i].b,stu[i].p)
printf("请输入您要删除的学生的学号:")
scanf("%ld", &num)
printf("n")
for(i=0i<ni++)
if(num==stu[i].num)
j=i
if(j!=(n-1))
{
for(e=i-1e<ne++,j++)
{
stu[j].num=stu[j+1].num
strcpy(stu[j].name,stu[j+1].name)
strcpy(stu[j].sex,stu[j+1].sex)
stu[j].age=stu[j+1].age
strcpy(stu[j].b,stu[j+1].b)
strcpy(stu[j].p,stu[j+1].p)
n--p--
}
}else {n--p--}
printf("提示:删除完毕!")
}elseprintf("提示:无学生数据,请输入数据!")
}
代码如下:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
typedef struct examinee //考生信息结构
{ char examno[20]//准考证号
char name[10]//姓名
char sex[4]//性别
short age//年龄
char examtype[10]//报考科目
}ElemType
typedef struct Node //定义链表结点
{
ElemType data//数据域
struct Node *next//指针域
}Node,*List,*position
List make_empty( List L )//创建一个带头结点的空表
int is_empty( List L )//测试链表是否是空表
int is_last( position p, List L )//测试当前位置是否是表尾
position make_node( position p,int n )//创建结点并输入考生信息
void put_information( position p )//是否输出该考生信息
void put_name_information( List L )//输出姓名为xx的考生信息
int put_pos_information( position p )//输出该地址考生信息
void link_to_tail( List L, position p )//将结点连接到表尾
int ciculation_make()//循环创建考生信息
int judge_put_all()//是否输出所有考生信息
void put_all(List L)//输出所有考生信息。
position find( List L )//查找第一个姓名为xx的元素并返回位置
position find_previous( List L )//查找第一个姓名为xx的元素并返回该元素直接前驱的位置
//int judge_delete_val()//询问是否删除考生数据
int delete_val( List L )//删除指定考生信息并输出其信息
void menu(List L)//菜单函数
List L
//position p
int
main( void )
{
List L = NULL//定义头结点指针
position p = NULL//定义表工作指针
L = make_empty( L )//创建空表
printf("ttt★★考生报名管理程序★★ntt----------------------------------------n")
menu(L)
return 0
}
//创建一个带头结点的空表
List
make_empty( List L)
{
L = ( List ) malloc (sizeof( Node ))
if(NULL == L)
{
printf("内存分配失败")
exit( 1 )
}
L->next = NULL
//printf("空表创建成功。n")
return L
}
//创建结点并输入考生信息
position
make_node( position p ,int n)
{
if(n) //n为1是创建结点并输入,n为0是修改
{
p = ( position ) malloc ( sizeof ( Node ))
p->next = NULL
}
printf("请输入考生准考证号:")
gets(p->data.examno)
printf("请输入考生姓名:")
gets(p->data.name)
do
{
printf("请输入考生性别,只能输入“男”或者“女”:")
gets(p->data.sex)
}
while( 0 != strcmp( p->data.sex, "男" ) &&0 != strcmp( p->data.sex, "女" ))//判断性别是否有误
printf("请输入考生年龄:")
scanf("%hd",&p->data.age)
getchar() //如果把这句删掉,就“无法执行”下面的报考类别
do
{
printf("请输入报考类别,只能输入“数学”或“英语”或者“数据结构”:")
gets(p->data.examtype)
}
while( 0 != strcmp( "英语", p->data.examtype ) &&0 != strcmp( "数学", p->data.examtype ) &&0 != strcmp( "数据结构", p->data.examtype ))
if(n)
{
printf("报名成功n")
}
else
{
printf("修改成功n")
}
return p
}
//前插法;
void
link_to_tail( List L, position p)
{
p->next = L->next
L->next = p
}
//查找第一个姓名为xx的元素并返回位置
position
find( List L )
{
position p = L->next
char name[10]
printf("请输入你要查找的考生姓名:")
gets(name)
while( p != NULL &&0 != strcmp( p->data.name , name))
{
p=p->next
}
return p
}
//测试链表是否是空表
int
is_empty( List L )
{
return L->next == NULL
}
//测试当前位置是否是表尾
int
is_last( position p, List L )
{
return p->next == NULL
}
//输出姓名为xx的考生信息
void
put_name_information( List L )
{
position p = find(L)
if(p!=NULL)
{
printf("您要查找的考生信息:n")
printf("准考证号:%st姓名:%st性别:%st年龄:%hdt报考科目:%snn",p->data.examno,p->data.name,p->data.sex,p->data.age,p->data.examtype)
}
else
{
printf("没有您要找的学生。n")
}
}
//循环创建考生信息
int
ciculation_make()
{
int n = 2
do
{
printf("是否继续创建考生信息?是请输入“1”,不是请输入“0”:")
scanf("%d",&n)
getchar()
}
while( n != 0 &&n != 1)
return n
}
//是否输出考生信息
void
put_information( position p )
{
int n=2
do
{
printf("是否输出该考生信息?是请输入“1”,不是请输入“0”:")
scanf("%d",&n)
getchar()
}
while( n != 0 &&n != 1)
if(n)
{
printf("准考证号:%st姓名:%st性别:%st年龄:%hdt报考科目:%sn",p->data.examno,p->data.name,p->data.sex,p->data.age,p->data.examtype)
}
}
//是否输出所有考生信息
int
judge_put_all()
{
int n = 2
do
{
printf("是否输出所有考生信息?是请输入“1”,不是请输入“0”:")
scanf("%d",&n)
getchar()
}
while( n != 0 &&n != 1)
return n
}
//输出所有考生信息
void
put_all(List L)
{
if(L->next == NULL)
{
printf("现无考生报名!n")
}
else
{
position p=L->next
while( p != NULL )
{
printf("准考证号:%st姓名:%st性别:%st年龄:%hdt报考科目:%sn",p->data.examno,p->data.name,p->data.sex,p->data.age,p->data.examtype)
p=p->next
}
}
//getchar()
}
//询问是否删除考生数据
int
judge_delete_val()
{
int n = 2
do
{
printf("是否要删除某个考生数据?是请输入“1”,不是输入“0”:")
scanf("%d",&n)
getchar()
}
while( n != 0 &&n != 1)
return n
}
//查找第一个姓名为xx的元素并返回其直接前驱的位置
position
find_previous( List L )
{
position q = L
position p = L->next
char name[10]
printf("请输入你要查找的考生姓名:")
gets(name)
while( p != NULL &&0 != strcmp( p->data.name , name))
{
q=p
p=p->next
}
if( p != NULL )
{
return q
}
else
return p
}
//删除指定考生信息并输出其信息
int
delete_val(List L)
{
int n=2
position q=NULL
position p=find_previous( L )//返回考生信息地址
if( NULL == p )
{
printf("你要删除的考生不存在n")
return 0
}
else
{
q = p->next
p->next = q->next
printf("删除成功。n删除的考生信息为:n")
printf("准考证号:%st姓名:%st性别:%st年龄:%hdt报考科目:%sn",q->data.examno,q->data.name,q->data.sex,q->data.age,q->data.examtype)
free(q)
return 1
}
}
//输出该地址考试信息
int
put_pos_information( position p )
{
if(p != NULL )
{
printf("准考证号:%st姓名:%st性别:%st年龄:%hdt报考科目:%snn",p->data.examno,p->data.name,p->data.sex,p->data.age,p->data.examtype)
return 1
}
else
{
printf("没有您要查找的学生。")
return 0
}
}
//菜单函数
void
menu(List L)
{
printf("ttt a. 考生报名入口n")
printf("ttt b. 查询考生信息n")
printf("ttt c. 修改考生信息n")
printf("ttt d. 删除考生信息n")
printf("ttt e. 全部考生信息n")
printf("ttt f. 程序作者信息n")
printf("ttt g. 退出程序n")
char n='h'
while(n != 'g')
{
do //确定正确输入
{
printf("请通过字母序号选择功能:")
n = getchar()
getchar()
putchar('n')
if( n <'a' || n >'g')
{
printf("错误的字母序号。n")
}
}
while( n <'a' || n >'g' )
switch (n)
{
case 'a':
{
printf("请输入报名考生信息:n")
position p = make_node( p, 1 )//创建新结点
link_to_tail( L, p )//将新结点连接到表上
put_information( p ) //是否输出该考生信息
putchar('n')
}
break
case 'b':
{
put_name_information( L )
putchar('n')
}
break
case 'c':
{
int n=0
position p = NULL
printf("您正在进行修改操作。n")
p = find(L)
n = put_pos_information( p )
if(n)
{
make_node( p , 0 )
put_information( p ) //是否输出该考生信息
}
putchar('n')
}
break
case 'd':
{
printf("您正在进行删除操作。n")
delete_val( L )
putchar('n')
}
break
case 'e':
{
put_all( L )
putchar('n')
}
break
case 'f':
{
printf(" 修改日期 版本号 修改人 修改内容 n")
printf(" --------------------------------------------------------n")
printf(" 2018.6.19 v2.0 陈百川 增加主菜单n")
printf(" 2018.6.23 v3.0 陈百川 增加生成文件功能nn")
printf(" 该版本号为v2.0n")
putchar('n')
}
break
default:
break
}
}
printf(" 感谢本次使用,祝您生活愉快。")
getch()
}
回答于 2022-12-11
代码如下:
for(i=0i<66i++)
printf("*")
printf("n")
printf("1.Input recordn")
printf("2.Caculate totel and average score of every coursen")
printf("3.Caculate totel and average score of every studentn")
printf("4.Sort in descending order by total score of every studentn")
printf("5.Sort in ascending order by total score of every studentn")
printf("6.Sort in ascending order by numbern")
printf("7.Sort in ascending order by namen")
printf("8.Search by numbern")
printf("9.Search by namen")
printf("10.Statistic analysis for every coursen")
printf("11.List recordn")
printf("12.Write to a filen")
printf("13.Read from a filen")
printf("0.Exitn")
for(i=0i<66i++)
printf("*")
printf("n")
printf("Please enter your choice:")
printf("n")
输入函数:
void Readscore (STU stu[],int n,int m) //1.输入数据
{
int i,j
for(i=0i<ni++)
{
printf("Input student's ID ,name and score")
scanf("%ld",&stu[i].studentID)
scanf("%s",stu[i].studentName)
for(j=0j<mj++)
scanf("%d",&stu[i].score[j])
}
}
数据处理函数:
void Tota (STU stu[],int n,int m) //2.计算每门课程的总分和平均分
{
int i,j,sum[M]
double ave[M]
for(j=0j<mj++)
{
sum[j]=0
for(i=0i<ni++)
{
sum[j]=sum[j]+stu[i].score[j]
}
ave[j]=(double)sum[j]/n
}
for(i=0i<mi++)
printf("Project %d 总分=%d,课程的平均分=%fn",i+1,sum[i],ave[i])
}
void Datasort_1 (STU stu[],int n,int m) //3.计算每个学生的总分和平均分
{
int i,j,sum[N]
double ave[N]
for(i=0i<ni++)
{
sum[i]=0
for(j=0j<mj++)
{
sum[i]=sum[i]+stu[i].score[j]
}
ave[i]=(double)sum[i]/m
}
for(i=0i<ni++)
printf("ID:%10ld,Name: %s Allscore=%d,The ave=%fn",stu[i].studentID,stu[i].studentName,sum[i],ave[i])
}
排序函数:
void Datasort_2 (STU stu[],int n,int m) //4.按每个学生的总分由高到低排出名次表
{
int i,j,k,h,sum[N]
STU t
for(i=0i<ni++)
{
sum[i]=0
for(j=0j<mj++)
{
sum[i]=sum[i]+stu[i].score[j]
}
}
for(i=0i<ni++)
{
k=i
for(j=i+1j<nj++)
{
if (sum[j]>sum[k])
k=j
}
if(i!=k)
{
t=stu[i],h=sum[i]
stu[i]=stu[k],sum[i]=sum[k]
stu[k]=t,sum[k]=h
}
}
for(i=0i<ni++)
printf("ID:%10ld,Name:%s,Score:%dn",stu[i].studentID,stu[i].studentName,sum[i])
}
void Datasort_3 (STU stu[],int n,int m) //5.按每个学生的总分由低到高排出名次表
{
int i,j,k,h,sum[N]
STU t
for(i=0i<ni++)
{
sum[i]=0
for(j=0j<mj++)
{
sum[i]=sum[i]+stu[i].score[j]
}
}
for(i=0i<ni++)
{
k=i
for(j=i+1j<nj++)
{
if (sum[j]<sum[k])
k=j
}
if(i!=k)
{
t=stu[i],h=sum[i]
stu[i]=stu[k],sum[i]=sum[k]
stu[k]=t,sum[k]=h
}
}
for(i=0i<ni++)
printf("ID:%10ld,Name:%s,score:%dn",stu[i].studentID,stu[i].studentName,sum[i])
}
void Datasort_4 (STU stu[],int n,int m) //6.按学号由小到大排出名次表
{
int i,j,k
STU t
for(i=0i<ni++)
{
k=i
for(j=i+1j<nj++)
{
if (stu[j].studentID<stu[k].studentID)
k=j
}
if(i!=k)
t=stu[k],stu[k]=stu[i],stu[i]=t
}
for(i=0i<ni++)
{
printf("ID:%10ld,Name:%sn",stu[i].studentID,stu[i].studentName)
for(j=0j<mj++)
printf("Project %d Score:%dn",j+1,stu[i].score[j])
}
}
数据分析函数:
void Statistis (STU stu[],int n,int m) //10.
{
int i,j,count_1,count_2,count_3,count_4,count_5
for(j=0j<mj++)
{
count_1=0,count_2=0,count_3=0,count_4=0,count_5=0
for(i=0i<ni++)
{
if(stu[i].score[j]>=90)
count_1++
else if(stu[i].score[j]>=80)
count_2++
else if(stu[i].score[j]>=70)
count_3++
else if(stu[i].score[j]>=60)
count_4++
else
count_5++
}
printf("project %dn",j+1)
printf("优秀:%dt优秀率:%f%n",count_1,(float)count_1/n)
printf("良好:%dt良好率:%f%n",count_2,(float)count_2/n)
printf("中等:%dt中等率:%fn",count_3,(float)count_3/n)
printf("及格:%dt及格率:%fn",count_4,(float)count_4/n)
printf("不及格:%dt不及格率:%fn",count_5,(float)count_5/n)
}
}
数据界面打印函数:
void List (STU stu[],int n,int m) //11.
{
int i,j,sum[N]
double ave[N]
for(i=0i<ni++)
{
sum[i]=0
for(j=0j<mj++)
{
sum[i]=sum[i]+stu[i].score[j]
}
ave[i]=(double)sum[i]/m
}
for(i=0i<ni++)
{
printf("ID:%10ld,Name:%sn",stu[i].studentID,stu[i].studentName)
for(j=0j<mj++)
{
printf("Score %d :%dn",j+1,stu[i].score[j])
}
printf("Allscore=%dn平均分%fn",sum[i],ave[i])
}
}
文件处理函数:
void WritetoFile(STU stu[],int n,int m) //将每个学生的记录信息写入文件
{
Tota(stu,n,m)
Datasort_2 (stu,n,m)
FILE *fp
if((fp=fopen("student.txt","w"))==NULL)
{
printf("Failure to open student.txt!n")
exit(0)
}
fwrite(stu,sizeof(STU),n,fp)
fclose(fp)
}
int ReadfromFile(STU stu[],int n,int m)//从文件中读出每个学生的记录信息并显示
{
FILE *fp
int i
if((fp=fopen("student.txt","r"))==NULL)
{
printf("Failure to open student.txt!n")
exit(0)
}
for(i=0!feof(fp)i++)
{
fread(&stu[i],sizeof(STU),1,fp)
}
fclose(fp)
printf("Total student is %d.n",i-1)
n=i-1
List(stu,n,m) //输出从文件中读出的信息到屏幕上
return i-1
}
以上就是关于跪求c语言教务管理系统源代码全部的内容,如果了解更多相关内容,可以关注,你们的支持是我们更新的动力!
版权声明:我们致力于保护作者版权,注重分享,被刊用文章【学生教务管理系统代码】因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!;
工作时间:8:00-18:00
客服电话
电子邮件
beimuxi@protonmail.com
扫码二维码
获取最新动态
