#include "conio.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define NUMLEN 10 //定义学号最大位数
#define NAMELEN 10 //定义名字长度
#define NUMBER 10 //定义学生个数
#define SCOREMAX 10 //定义成绩的最大位数
#define ESC 0x1b //ESC的十六进制键码
struct stu
{
int num; //学号
char name[NAMELEN]; //名字
float score[3]; //三门课程的成绩
float average; //记录平均分
struct stu *next;
};
//查看所有学生的记录
int Display_LinkList(struct stu *);
//检查学输入的学号是否合法
int Find_Num(char *);
//检查学号是否重复
int Check_Num(int ,struct stu *);
//检查姓名是否合法
int Find_Name(char *);
//检查姓名是否重复
int Check_Name(char *,struct stu *);
//检查成绩输入是否合法
int Check_Score(char *);
//求出平均成绩
int _average(struct stu * t);
//输出最高分
int high_score(struct stu *o);
//建立插入链表
struct stu * Insert_LinkList(struct stu * h)
{
struct stu *p,*p1,*q,*q1;
char n[NUMLEN],_score[SCOREMAX],key;
int flag,flag1,i,j;
p=h;
if(p == NULL)
{
printf("\n\t\t\t没有学生记录,是否创建y/n");
if(key=getch(),key != 'y')
return h; }
do{
system("cls");
if( ( q1=q=(struct stu *)malloc(sizeof(struct stu)) ) == NULL )
{
printf("内存不足");
return h;
}
//检查学号输入的是不是数字,学号只能是数字,合法做if括号里面的语句
printf("请输入学号:");
do
{
scanf("%s",n);
if( flag=Find_Num(n) )
{
q->num=0;
for(i=0;n[i] != '\0';i++)
q->num=q->num*10+(n[i]-'0');
flag1=1;
if(h != NULL)
flag1=Check_Num(q->num ,h);
}
}while( !(flag && flag1) );
system("cls");
//输入姓名
printf("请输入%d号学生的姓名",q->num);
do
{
scanf("%s",q->name);
flag=Find_Name(q->name); //检查姓名是包含数字..和其他字符..名字只能是字母,有不合法的字符重新输入
flag1=1;
if(h != NULL)
flag1=Check_Name(q->name,h);
}while( !(flag && flag1) );
system("cls");
//输入成绩
printf("请输入%d号学生的三门成绩",q->num);
for(j=0;j<3;j++)
{
do
{
for(i=0;n[i] != '\0';i++)
_score[i]='\0';
scanf("%s",_score);
if( flag=Check_Score(_score) )
{
q->score[j]=0;
for(i=0;_score[i] != '\0';i++)
q->score[j]=q->score[j]*10+(_score[i]-'0');
if(q->score[j] > 100 || q->score[j] < 0)
{
printf("错误!!成绩只能是0-100之间,请重新输入");
flag=0;
}
}
}while( !flag );
}
q->next=NULL;
if(h == NULL)
return q;
//插入链表 插入学生记录
if(p != NULL)
{
while( (q->num > p->num) && (p->next != NULL) )
{
p1=p;
p=p->next;
}
if(q->num <= p->num)
{
if(p == h)
h=q;
else p1->next=q;
q->next=p;
}
else
{
p->next=q;
q->next=NULL;
}
}
printf("\n\t\t\t是否继续添加y/n\n");
printf("\t\t\t请选择:");
key=getch();
}while(key == 'y');
return h;
}
//删除链表
struct stu * Delete_LinkList(struct stu * h)
{
struct stu *pl,*pb;
pl=h;
char n[NUMLEN];
int del,flag,i;
system("cls");
if(pl == NULL)
{
printf("\n\t\t\t没有学生记录,删除失败\n");
printf("\t\t\t 按任意键返回主目录");
getch();
return h;
}
Display_LinkList(pl);
printf("请输入你要删除的学号:");
do
{
scanf("%s",n);
if(flag=Find_Num(n)) //检查学号输入的是不是数字,学号只能是数字,合法做if括号里面的语句
{ //把字符串转换成学号
del=0;
for(i=0;n[i] != '\0';i++)
del=del*10+(n[i]-'0');
}
}while( !flag );
if(pl->num == del)
return pl->next;
else
{
while( (del != pl->num) && (pl->next != NULL) )
{
pb=pl;
pl=pl->next;
}
if( del == pl->num )
{
pb->next=pl->next;
Display_LinkList(h);
printf("\n删除成功");
getch();
}
else {
printf("\n\t\t\t\t无法找到该学号,删除失败");
getch();
}
}
return h;
}
//输出链表
int Display_LinkList(struct stu * a)
{
int i;
struct stu *p;
p=a;
system("cls");
if(p==NULL)
{
printf("\n\t\t\t\t没有学生记录\n");
return 0;
}
printf("学号\t姓名\t\t成绩1\t成绩2\t成绩3\n");
while(p != NULL)
{
printf("%d\t%s\t",p->num,p->name);
i=0;
while(i<3)
{
printf("%.2f\t",p->score[i]);
i++;
}
p=p->next;
printf("\n");
}
return 0;
}
//打印每个的平均成绩
int _average(struct stu *p)
{
struct stu *pw;
int i;
float t;
system("cls");
if( p == NULL)
{
printf("\n\t\t\t\t没有学生记录\n");
printf("\t\t\t 按任意键返回主目录");
getch();
return 0;
}
pw=p;
while(pw != NULL)
{
i=0;
t=0;
for(i=0;i<3;i++)
t+=pw->score[i];
pw->average=t/3;
pw=pw->next;
}
pw=p;
printf("学号 姓名\t\t平均成绩\n");
while(pw != NULL)
{
printf("%d\t%s\t%.2f\n",pw->num,pw->name,pw->average);
pw=pw->next;
}
printf("按任意键返回主目录");
getch();
return 0;
}
//输出最高分的所有成绩
int High_score(struct stu * k)
{
struct stu *b,*max;
int i;
max=b=k;
system("cls");
if(k == NULL)
{
printf("\n\t\t\t\t没有学生记录\n");
printf("\t\t\t 按任意键返回主目录");
getch();
return 0;
}
else
{
while(b != NULL)
{
if(max->average < b->average)
max=b;
b=b->next;
}
printf("平均分最高的是:\n");
printf("学号\t姓名\t\t成绩1\t成绩2\t成绩3\n");
printf("%d\t%s\t",max->num,max->name);
for(i=0;i<3;i++)
printf("%.2f\t",max->score[i]);
printf("\n");
}
printf("按任意键返回主目录");
getch();
return 0;
}
//检查学输入的学号是否合法
int Find_Num(char *c)
{
while(*c != 0)
{
if( !((*c>='0') && (*c <= '9')) )
{
printf("\n你输入的学号不合法,学号要求是纯数字组成,请重新输入:");
return 0;
}
c++;
}
return 1;
}
//检查学号是否重复
int Check_Num(int s,struct stu * sy)
{
struct stu *d;
d=sy;
while( d != NULL )
{
if( s == d->num )
{
printf("\n学号有重复,请重新输入学号:");
return 0;
}
d=d->next;
}
return 1;
}
//检查姓名是否合法
int Find_Name(char * ch)
{
while(*ch != 0)
{
if( !(((*ch >= 'a') && (*ch <= 'z')) || ((*ch >= 'a') && (*ch <= 'z'))) )
{
printf("\n输入的名字不合法,只能由字母组成!!请重新输入一个名字:");
return 0;
}
ch++;
}
return 1;
}
//检查姓名是否重复
int Check_Name(char *c,struct stu *d)
{
while( d != NULL)
{
if( strcmp(c,d->name) == 0 )
{
printf("\n姓名有重复!!请重新输入:");
return 0;
}
d=d->next;
}
return 1;
}
//检查成绩输入是否合法
int Check_Score(char *ck)
{
if(*ck == '0')
{
printf("\n第一个数字不能为0");
return 0;
}
while(*ck != 0)
{
if( !( ((*ck>='0') && (*ck <= '9')) || (*ck == '.') ) )
{
printf("\n成绩输入有错!!请重新输入:");
return 0;
}
ck++;
}
return 1;
}
//主目录
int display()
{
int key;
struct stu *head=NULL;
do
{
system("cls");
printf("\t\t\t\t学生管理系统\n\n");
printf("-------------------------------------------------------------------------------\n");
printf("| |\n");
printf("| |\n");
printf("|\t\t\t1.添加学生记录\t\t\t\t\t |\n");
printf("| |\n");
printf("| |\n");
printf("|\t\t\t2.删除学生记录\t\t\t\t\t |\n");
printf("| |\n");
printf("| |\n");
printf("|\t\t\t3.查看所有记录\t\t\t\t\t |\n");
printf("| |\n");
printf("| |\n");
printf("|\t\t\t4.查看所有学生的平均分数\t\t\t |\n");
printf("| |\n");
printf("| |\n");
printf("|\t\t\t5.查看最高分的学生信息\t\t\t\t |\n");
printf("| |\n");
printf("| |\n");
printf("
没有合适的资源?快使用搜索试试~ 我知道了~
c语言的一些小程序附有代码
共89个文件
c:53个
exe:23个
obj:12个
需积分: 10 62 下载量 125 浏览量
2008-11-30
17:50:51
上传
评论
收藏 173KB RAR 举报
温馨提示
我初学c时自己写的一些小程序附代码。一直不舍得删~代码与程序相对应~可能有些没编译的。
资源推荐
资源详情
资源评论
收起资源包目录
c语言题目.rar (89个子文件)
c语言题目
杨辉三角.exe 21KB
另类排序.exe 21KB
ssssssssssssssssssssssssss.c 737B
4.8.c 674B
4.9.c 914B
472AB0~1.OBJ 461B
8.9.c 634B
7.8.exe 22KB
7.12.c 476B
网络题目1.1.c 600B
5.5~1.c 3KB
7.11.exe 22KB
未命名11111.c 464B
7.11.c 1KB
6.11.c 837B
6.9.exe 21KB
4.5.c 181B
8.11.c 767B
666.c 155B
7.8.c 2KB
4.10.c 464B
ssssssssssssssssssssssssss.exe 21KB
5.9.obj 3KB
未命名11111.exe 22KB
7.14.exe 20KB
未命名12.c 2KB
链表~.c 162B
完整棱形.c 2KB
7.10.exe 21KB
492AC0~1.OBJ 663B
7.15.c 524B
5.20.exe 21KB
5.10.c 303B
lalala.c 1KB
题目解答5.6.c 647B
题目解答3.6.c 184B
5.12.c 379B
未命名r ni sa.c 8KB
8.11.exe 20KB
5.20.c 674B
7.15.exe 20KB
7.16.exe 20KB
5.8.c 401B
6.11.exe 22KB
冒泡排序.exe 21KB
棱形字母图案.c 2KB
7.12.exe 21KB
452AA0~1.OBJ 672B
dsad.c 640B
未命名12.obj 6KB
4822C0~1.OBJ 569B
未命名2.c 706B
6.8.c 2KB
7.14.c 423B
4.8.obj 3KB
tctemp.dat 3B
杨辉三角.c 748B
sadadasd.c 397B
7.13.c 566B
5.5.obj 6KB
6.7.c 371B
5.7.c 356B
8.9.exe 20KB
冒泡排序.c 795B
7.16.c 545B
7.13.exe 20KB
4.9.obj 3KB
8.12.c 903B
未命名2.obj 2KB
未命名1.c 201B
5.11.c 434B
7.10.c 632B
4.10~1.c 542B
题目棱形图案.c 378B
完整棱形.obj 6KB
8.10.c 396B
题目棱形图案.exe 20KB
6.9.c 1KB
8.8.exe 20KB
另类排序.c 767B
题目解答5.6.obj 2KB
8.8.c 725B
8.10.exe 20KB
5.5.c 1KB
5.9.c 596B
4.7.c 290B
题目解答3.8.c 262B
链表~.exe 23KB
8.12.exe 20KB
共 89 条
- 1
资源评论
fengguda
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功