⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄

📁 几个开发用的小程序,很容易懂的,非常实用,大家可以
💻
字号:
现在不是很长啊!就看下啊,你们肯定比我强啊!只要稍微改下就可以了啊!把里面加个功能“显示输出60分以下、60~79、80~89、90分以上各分数段的学生信息”就可以了啊,拜托啊!!1 


#include "stdio.h" 
#include "stdlib.h" 
#include "string.h" 
int shoudsave=0; // 
struct student 
{ 
char num[10];//学号 
char name[20]; 
int cgrade; 
char neartime[10];//最近更新时间 
}; 
typedef struct node 
{ 
struct student data; 
struct node *next; 
}Node,*Link; 
void menu() 
{ 
printf("********************************************************************************"); 
printf("\t1输入学生资料\t\t\t\t\t2查询学生资料\n"); 
printf("\t3修改学生资料\t\t\t\t\t4显示学生资料\n"); 
printf("\t5统计学生成绩\t\t\t\t\t6保存学生资料\n"); 
printf("\t7获取帮助信息\t\t\t\t\t0退出系统\n"); 
printf("********************************************************************************\n"); 
} 
void printstart() 
{ 
printf("-----------------------------------------------------------------------\n"); 
} 
void Wrong() 
{ 
printf("\n=====>提示:输入错误!\n"); 
} 
void Nofind() 
{ 
printf("\n=====>提示:没有找到该学生!\n"); 
} 
void printc() // 本函数用于输出中文 
{ 
printf(" 学号\t    姓名       C语言成绩 \n"); 
} 
void printe(Node *p)//本函数用于输出英文 
{ 
printf("%-12s%s\t%d\t  \n",p->data.num,p->data.name,p->data.cgrade); 
} 
Node* Locate(Link l,char findmess[],char nameornum[]) //该函数用于定位连表中符合要求的接点,并返回该指针 
{ 
Node *r; 
if(strcmp(nameornum,"num")==0) //按学号查询 
{ 
r=l->next; 
while(r!=NULL) 
{ 
  if(strcmp(r->data.num,findmess)==0) 
  return r; 
  r=r->next; 
} 
} 
else if(strcmp(nameornum,"name")==0) //按姓名查询 
{ 
r=l->next; 
while(r!=NULL) 
{ 
  if(strcmp(r->data.name,findmess)==0) 
  return r; 
  r=r->next; 
} 
} 
return 0; 
} 
void Add(Link l) //增加学生 
{ 
Node *p,*r,*s; 
char num[10]; 
r=l; 
s=l->next; 
while(r->next!=NULL) 
r=r->next; //将指针置于最末尾 
while(1) 
{ 
printf("请你输入学号(以'0'返回上一级菜单:)"); 
scanf("%s",num); 
if(strcmp(num,"0")==0) 
  break; 
while(s) 
{ 
  if(strcmp(s->data.num,num)==0) 
  { 
  printf("=====>提示:学号为'%s'的学生已经存在,若要修改请你选择'4 修改'!\n",num); 
  printstart(); 
  printc(); 
  printe(s); 
  printstart(); 
  printf("\n"); 
  return; 
  } 
  s=s->next; 
} 
  
p=(Node *)malloc(sizeof(Node)); 
  
strcpy(p->data.num,num); 
printf("请你输入姓名:"); 
scanf("%s",p->data.name); 
getchar(); 
printf("请你输入c语言成绩:"); 
scanf("%d",&p->data.cgrade); 
//信息输入已经完成 
p->next=NULL; 
r->next=p; 
r=p; 
shoudsave=1; 
  
} 
} 
void Qur(Link l) //查询学生 
{ 
int sel; 
char findmess[20]; 
Node *p; 
  if(!l->next) 
{ 
printf("\n=====>提示:没有资料可以查询!\n"); 
return;  
} 
printf("\n=====>1按学号查找\n=====>2按姓名查找\n"); 
scanf("%d",&sel); 
if(sel==1)//学号 
{ 
printf("请你输入要查找的学号:"); 
scanf("%s",findmess); 
p=Locate(l,findmess,"num"); 
if(p) 
{ 
  printf("\t\t\t\t查找结果\n"); 
  printstart(); 
  printc(); 
  printe(p); 
  printstart(); 
} 
else 
  Nofind(); 
} 
else if(sel==2) //姓名 
{ 
printf("请你输入要查找的姓名:"); 
scanf("%s",findmess); 
p=Locate(l,findmess,"name"); 
if(p) 
{ 
  printf("\t\t\t\t查找结果\n"); 
  printstart(); 
  printc(); 
  printe(p); 
  printstart(); 
} 
else 
  Nofind(); 
} 
else 
Wrong(); 
  
} 
void Modify(Link l) 
{ 
Node *p; 
char findmess[20]; 
if(!l->next) 
{ 
printf("\n=====>提示:没有资料可以修改!\n"); 
return; 
} 
printf("请你输入要修改的学生学号:"); 
scanf("%s",findmess); 
p=Locate(l,findmess,"num"); 
if(p) 
{ 
printf("请你输入新学号(原来是%s):",p->data.num); 
scanf("%s",p->data.num); 
printf("请你输入新姓名(原来是%s):",p->data.name); 
scanf("%s",p->data.name); 
printf("请你输入新的c语言成绩(原来是%d分):",p->data.cgrade); 
scanf("%d",&p->data.cgrade); 
printf("\n=====>提示:资料修改成功!\n"); 
shoudsave=1; 
} 
else 
Nofind(); 
} 
void Disp(Link l) 
{ 
int count=0; 
Node *p; 
p=l->next; 
if(!p) 
{ 
printf("\n=====>提示:没有资料可以显示!\n"); 
return; 
} 
printf("\t\t\t\t显示结果\n"); 
printstart(); 
printc(); 
printf("\n"); 
while(p) 
{ 
printe(p); 
p=p->next; 
} 
printstart(); 
printf("\n"); 
} 
void Tongji(Link l) 
{ 
Node *pc = l; //用于指向分数最高的接点 
Node *r=l->next; 
if(!r) 
{ 
printf("\n=====>提示:没有资料可以统计!\n"); 
return ; 
} 

while(r!=NULL) 
{ 
if(r->data.cgrade>=pc->data.cgrade) 
    pc=r;  
    r=r->next; 
} 
printf("------------------------------统计结果--------------------------------\n"); 
printf("c语言最高者:\t%s %d分\n",pc->data.name,pc->data.cgrade); 
  printstart(); 
}
void Save(Link l) 
{ 
FILE* fp; 
Node *p; 
int flag=1,count=0; 
fp=fopen("c:\\student","wb"); 
if(fp==NULL) 
{ 
printf("\n=====>提示:重新打开文件时发生错误!\n"); 
exit(1); 
} 
p=l->next; 
while(p) 
{ 
if(fwrite(p,sizeof(Node),1,fp)==1) 
{  
  p=p->next; 
  count++; 
} 
else 
{ 
  flag=0; 
  break; 
} 
} 
if(flag) 
{ 
printf("\n=====>提示:文件保存成功.(有%d条记录已经保存.)\n",count); 
shoudsave=0; 
} 
fclose(fp); 
} 
void main() 
{ 
Link l;//连表 
FILE *fp; //文件指针 
int sel; 
char ch; 
char jian; 
int count=0; 
Node *p,*r; 
printf("\t\t\t\t学生成绩记录簿\n\t\t\t\t-------电子信息学院 李慧(200501135)\n"); 
l=(Node*)malloc(sizeof(Node)); 
l->next=NULL; 
r=l; 
fp=fopen("C:\\student","rb"); 
if(fp==NULL) 
{ 
printf("\n=====>提示:文件还不存在,是否创建?(y/n)\n"); 
scanf("%c",&jian); 
if(jian=='y'||jian=='Y') 
fp=fopen("C:\\student","wb"); 
else 
exit(0); 
} 
printf("\n=====>提示:文件已经打开,正在导入记录......\n"); 
while(!feof(fp)) 
{ 
p=(Node*)malloc(sizeof(Node)); 
if(fread(p,sizeof(Node),1,fp)) //将文件的内容放入接点中 
{ 
  p->next=NULL; 
  r->next=p; 
  r=p; //将该接点挂入连中 
  count++; 
} 
} 
fclose(fp); //关闭文件 
printf("\n=====>提示:记录导入完毕,共导入%d条记录.\n",count); 
while(1) 
{ 
menu(); 
printf("请你选择操作:"); 
scanf("%d",&sel); 
if(sel==0) 
{ 
  if(shoudsave==1) 
  { getchar(); 
  printf("\n=====>提示:资料已经改动,是否将改动保存到文件中(y/n)?\n"); 
  scanf("%c",&ch); 
  if(ch=='y'||ch=='Y') 
   Save(l); 
  } 
  printf("\n=====>提示:你已经退出系统,再见!\n"); 
  break; 
} 
switch(sel) 
{ 
case 1:Add(l);break; //增加学生 
case 2:Qur(l);break;//查询学生 
case 3:Modify(l);break;//修改学生 
case 4:Disp(l);break;//显示学生 
case 5:Tongji(l);break;//统计学生 
case 6:Save(l);break;//保存学生 
case 7:printf("\t\t\t==========帮助信息==========\n");break; 
default: Wrong();getchar();break; 
} 
} 
} 





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -