问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言编写的学生作业管理系统

发布网友 发布时间:2022-05-12 13:26

我来回答

1个回答

热心网友 时间:2023-10-09 15:38

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>

#define max 20

typedef struct student    //学生
{
char sno[max]; // 学号
char sname[max];  //姓名
char sex[max];   //性别
char age[max];  //年龄
char depart[max];  //系
char classs[max];  //班
char grade[max]; //年级

struct student* next;
} student;

student* head;

int LogOn()  //登录模块,已实现输入密码不回显,如果中途发现输错某几位,可退格键重输
{
char username[max],password[max];
printf("\n请输入用户名:");
scanf("%s",username);
printf("\n请输入密码(最多15位):");

//开始以不回显且支持退格方式获取输入密码
int i=0;
while((i>=0)&&(password[i++]=getch())!=13)//条件i>=0是用于*退格的范围
{
if(password[i-1]=='\b')//对退格键的处理
{
printf("%c%c%c",'\b','\0','\b');
i=i-2;
}
else
printf("*");
}
password[--i]='\0';

//已获取密码。验证用户身份
if(!strcmp(username,"zhang")&&!strcmp(password,"8147086"))
{
printf("\n登录成功!");
return 1;
}
else  
return 0;

}

void regist()
{
char ch;
student *s,*ptr;  //s用来建新结点,ptr用来暂存头结点

do
{

   s=(student*)malloc(sizeof(student)); // 新建一个学生结点

printf("\n开始注册...");            //开始注册
   printf("\n请输入该学生的学号:");
   scanf("%s",s->sno);
   printf("\n请输入该学生的姓名:");
   scanf("%s",s->sname);
   printf("\n请输入该学生的性别:");
   scanf("%s",s->sex);
      printf("\n请输入该学生的年龄:");
   scanf("%s",s->age);
   printf("\n请输入该学生的系:");
   scanf("%s",s->depart);
   printf("\n请输入该学生所在的班:");
   scanf("%s",s->classs);
   printf("\n请输入该学生所在的年级");
   scanf("%s",s->grade);

ptr=head;
head=s;//将新结点插入队头
s->next=ptr;

fflush(stdin);
printf("\n请问是否继续注册?(Y/N)");
scanf("%c",&ch);
}while(ch=='Y'||ch=='y');

return;
}

void ElePrint(char str[])  //输出单个元素
{
if(str==NULL) exit(0);
printf("%s",str);
for(unsigned int i=0;i<12-strlen(str);i++) printf(" ");//为了对齐输出,需插入一些空格
return;
}

int LinePrint(student *ptr) //输出一行
{
if(ptr==NULL)  //检查传进来的指针
return 0;

printf("\n");
ElePrint(ptr->sno);
ElePrint(ptr->sname);
ElePrint(ptr->age);
ElePrint(ptr->sex);
ElePrint(ptr->depart);
ElePrint(ptr->classs);
ElePrint(ptr->grade);

return 1;
}

void print()  //输出全部学生信息
{
student *ptr=head;
printf("\n学号        姓名        年龄        性别        系          班          年级        ");
while(ptr)
{
LinePrint(ptr);
ptr=ptr->next;
}
printf("\n");
return;
}
void search()//查询模块
{
int method;//查询方式
char no[max],name[max],departm[max],clss[max],grades[max]; //用来接收查询关键字
while(1)
{
printf("\n请选择查询方式");
   printf("\n1.按学号查询");
printf("\n2.按姓名查询");
   printf("\n3.按所在系查询");
   printf("\n4.按所在班级查询");
   printf("\n5.按所在年级查询");
printf("\n6.打印全部学生信息");
   printf("\n7.返回主菜单\n");

   scanf("%d",&method);

   student *p=head,*temp;

   switch(method)
{
      case 1:  
  printf("\n请输入要查询的学号:");
  scanf("%s",no);    
  while(p)
  {
  if(!strcmp(p->sno,no))
  break;
  else
  {
  temp=p;
  p=p->next;
  }
  }
  printf("\n学号        姓名        年龄        性别        系          班          年级        ");
  LinePrint(p);
  break;
  case 2:
  printf("\n请输入要查询的姓名:");
  scanf("%s",name);
  printf("\n学号        姓名        年龄        性别        系          班          年级        ");
  while(p)
  {
  if(!strcmp(p->sname,name))
  LinePrint(p);      
  p=p->next;
  }
  break;
  case 3:
  printf("\n请输入学生所在的系:");
  scanf("%s",departm);
  printf("\n学号        姓名        年龄        性别        系          班          年级        ");
  while(p)
  {
  if(!strcmp(p->depart,departm))
  LinePrint(p);
  p=p->next;
  }
  break;
  case 4:
  printf("\n请输入学生所在的班:");
  scanf("%s",clss);
  printf("\n请输入学生所在的年级:");      
  scanf("%s",grades);      
  printf("\n学号        姓名        年龄        性别        系          班          年级        ");
  while(p)
  {
  if(!strcmp(p->classs,clss)&&!strcmp(p->grade,grades))
  LinePrint(p);
  p=p->next;
  }
  break;
   
  case 5:
  printf("\n请输入学生所在的年级:");
  scanf("%s",grades);
  printf("\n学号        姓名        年龄        性别        系          班          年级        ");
  while(p)
  {
  if(!strcmp(p->grade,grades))
  LinePrint(p);
  p=p->next;
  }
  break;

  case 6:
  print();
  break;
   
  case 7:
  return;
  default:
  printf("很抱歉,暂无此查询方式!");
  break;
}
}

}

void modify()//修改学生信息
{
char num[max];
student *p=head;
printf("\n请输入要修改的学生的学号:");
scanf("%s",num);
while(p)
{
if(!strcmp(p->sno,num))
break;
else
p=p->next;
}
if(p==NULL)
{
printf("\n错误:没有此学生的信息!\n");
return;

}
LinePrint(p);

printf("\n请输入要修改的该学生的信息:");
printf("\n1.姓名");
printf("\n2.性别");
printf("\n3.年龄");
printf("\n4.所在的系");
printf("\n5.所在的班");
printf("\n6.所在的年级");

char name1[max],sex1[max],age1[max],depart1[max],class1[max],grade1[max];
int select;
fflush(stdin);
scanf("%d",&select);
printf("\n请输入新的信息:");

switch(select)
{
case 1:
scanf("%s",name1);
strcpy(p->sname,name1);
break;
case 2:
scanf("%s",sex1);
strcpy(p->sex,sex1);
break;
case 3:
scanf("%s",age1);
strcpy(p->age,age1);
break;
case 4:
scanf("%s",depart1);
strcpy(p->depart,depart1);
break;
case 5:
scanf("%s",class1);
strcpy(p->classs,class1);
break;
case 6:
scanf("%s",grade1);
strcpy(p->grade,grade1);
break;
default:
printf("\nError!");
break;
}

LinePrint(p);
return;
}

void del()// 删除某学生的信息
{
student *p=head,*temp=head,*s;
char num1[max];
printf("\n请输入要删除的学生的学号:");
scanf("%s",num1);
while(p)//查找该学生所在的结点
{
if(!strcmp(p->sno,num1))
break;
else
{
temp=p;
p=p->next;
}

}//while
if(!p)  
{
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);
printf("\n已经删除该学生的信息.");
}
return;
}

void sort() //排序模块。将学生记录按学号从小到大排列。用起泡排序算法实现
{

student *ptr,*s=head,*p;
int count=0,count1;
while(s)//统计链表结点个数
{
count++;
s=s->next;
}

for(int i=1;i<count;i++)
{
ptr=head;
p=NULL;
count1=count-i; //用来控制每轮起泡排序的终点,即每次把学号最小的结点移到倒数第i个结点
while(ptr&&ptr->next&&(count1--))
{
if(strcmp(ptr->sno,ptr->next->sno)>0)
{
s=ptr->next;
ptr->next=s->next;
if(p==NULL) //ptr处于队头时
head=s;
else
p->next=s;
s->next=ptr;
p=s;
}
else
{
ptr=ptr->next;
if(p==NULL) //ptr处于队头时
p=head;
else
p=p->next;
}
}
}
return;
}

void quit()
{
char ch;
printf("\n真的要退出?(Y/N)");
fflush(stdin);
scanf("%c",&ch);
if(ch=='Y'||ch=='y')
exit(0);
return;
}

int main()
{
int option;

printf("\nCopyright@2005 KongXinCai All rights reserved.");
printf("\n欢迎使用学生信息管理系统!\n");

//登录模块
int icheck=0;
while(icheck<3)
{
if(LogOn()==0)
icheck++;
else
break;

}
if(icheck==3)
{
printf("\n连续登录三次不成功,退出!");
exit(0);
}

//系统界面

while(1)
{
printf("\n\n请选择需要的服务:");
   printf("\n1.注册");
   printf("\n2.查询");
   printf("\n3.修改");
   printf("\n4.删除");
   printf("\n5.排序");
 printf("\n7.求平均");
   printf("\n6.退出\n");

scanf("%d",&option);

switch(option)
{
case 1:
regist();
break;
case 2:
search();
break;
case 3:
modify();
break;
case 4:
del();
break;
case 5:
sort();
break;
case 6:
quit();
break;
}

}

return 0;

}


声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
平安e家保是什么险 2023年高级会计师报名时间和条件 2022高级会计师报考条件要求是什么? 问几个英文语法问题,希望能正确回答~ 女生锁骨下长痣,左右都有 不是很对称 寓意什么呐? 抖音上传照片音乐短怎么办 断夜奶好方法 婴儿断夜奶最佳方法 建设银行,你打算坑害多少优质客户? 【PS教程】如何做出凹陷字体效果的氛围海报 c语言做的学生管理系统,要简单的。 07年花冠故障码P2769.DSL电磁线几圈控制低,是什么问题 自动档车PRNDS分别是什么意思? WAN和DSL那个好? word文档命名太长咋么办 新三板转板主板,是只转到创业板里来吗 创业板的上市公司能不能转到主板上市? 模具热流道模具运油堵头漏油怎么处理 金立s5,1能放投影机吗 塑料模具冷却水道与回针孔想通了怎么办? 金立S5.5手机怎样连接投影仪播放视频? 北交所转创业板能翻倍吗 为什么注塑模具的抽芯水路都通了试了怎么还是总不行 模具水路设计有死水会有什么后果 模具要吹水打是什么意思? 关于模具水道 注塑机水套堵除水垢 注塑模具水道清洗剂,水咀结垢堵塞用什么清理,模具 在网上帮人做代购女装、还要交200元的代理费,给我拿出厂价,会不会是骗人的啊? 看到朋友圈代购我也想做,要交200元代理费,发货不经自己的手,靠谱吗?我应该怎样与发货商保持联系? 学生管理系统C语言 海南能铺实木地板吗?地板会因为空气潮湿而变形或者腐烂吗? html页面a标签可以不写href属性吗 上市公司每年都不分红只高送转那股民怎么盈利 常熟建行信用卡可以车贷吗? 水产养殖氨氮高了怎么处理 水泥池养虾怎么控制氨氮含量 手机扬声器有杂音,修了两次都没修好,能要求换手机吗? 玉米收割机需要什么驾照 收割机好学吗?请求指教,新手 去哪能学习修理玉米收割机 如何输入string类型字符串 the mid 20th century中文 mid-centry是什么意思? 用英语翻译“为了解决始于20世纪中叶的污染问题,很多环境保护组织先后成立。但是,最重要的环境保护者也许 It was not easy to go home for lunch every day in the mid-20th century.的翻译 高考英语 单选 2010 沈阳模拟 Since the mid-20th century, biology has truly come of age,achieving an 谈论一下英国的工业革命(英文版) 二十世纪七十年代中期英文怎么说 100分,请好心人帮我翻译下这三段英文。。。还可以加分!