第一次写,难免会有些紧张 ,这是我们的课程设计作业,拉出来分享下。 -_- 大一的代码看起来真特么丑
/*
版本号 V1.0
时间 2014.6.24*/
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
#define SI sizeof(stu)
#define PT "^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^\n"
#define ET "|%-15s|%-14ld|%-9s|%-8d|%-8d|%-14ld|%-6.1f|%-6.1f|%-6.1f|%-6.1f|%6.1f|%6.1f|%6.1f|\n绩点: |%-6.1f|%-6.1f|%-6.1f|%-6.1f|%-6.1f|\n",node->name,node->num,node->sex,node->age,node->bir,node->tel,node->score[0],node->score[1],node->score[2],node->score[3],node->score[4],node->sum,node->ave,node->gpa[0],node->gpa[1],node->gpa[2],node->gpa[3],node->gpa[4]
void clear(void) //清屏函数
{
system("clear");
}
typedef struct s
{
long num; //学号
char name[20]; //姓名
char sex[5]; //性别
int age; //年龄
int bir; //生日
long tel; //电话号码
float score[5]; //五门成绩
float ave; //平均分
float gpa[5]; //绩点
float sum; //总分数
char pass[15];
struct s * next;
}stu;
typedef struct passw
{
long num;
char pass[15];
struct passw *next;
}DI;
stu * creat() //创建链表
{
stu* head,*node,*new_node;
FILE *fp;
fp=fopen("os.txt","w+");
if((fp==NULL))
{
printf("加载失败!\n");
exit(0);
}
head = node = (stu *)malloc(SI);
new_node = (stu *)malloc(SI);
printf("\n|学生姓名 |学号 |姓别 |年龄 |生日 |电话号码 |高数 |英语 |离散 |大物 |C语言:\n");
scanf("%s %ld %s %d %d %ld %f %f %f %f %f",new_node->name,&new_node->num,new_node->sex,&new_node->age,&new_node->bir,&new_node->tel,&new_node->score[0],&new_node->score[1],&new_node->score[2],&new_node->score[3],&new_node->score[4]);
int i;
float sum=0;
for (i=0;i<5;i++)
{
sum+=new_node->score[i];
if (new_node->score[i]<60)
new_node->gpa[i] = 0;
else
new_node->gpa[i] = new_node->score[i]/10-5;
}
new_node->ave = sum/5;
new_node->sum = sum;
while (new_node->num!=0)
{
node->next = new_node;
node = new_node;
new_node = (stu *)malloc(SI);
printf("\n|学生姓名 |学号 |姓别 |年龄 |生日 |电话号码 |高数 |英语 |离散 |大物 |C语言:\n");
scanf("%s %ld %s %d %d %ld %f %f %f %f %f",new_node->name,&new_node->num,new_node->sex,&new_node->age,&new_node->bir,&new_node->tel,&new_node->score[0],&new_node->score[1],&new_node->score[2],&new_node->score[3],&new_node->score[4]);
int i;
float sum=0;
for (i=0;i<5;i++)
{
sum+=new_node->score[i];
if (new_node->score[i]<60)
new_node->gpa[i] = 0;
else
new_node->gpa[i] = new_node->score[i]/10-5;
}
new_node->ave = sum/5;
new_node->sum = sum;
}
node->next = NULL;
free(new_node);
fclose(fp);
return head;
}
void write(stu *head)
{
stu *new_node;
new_node = head->next;
FILE *fp;
if((fp = fopen("os.txt","w+"))==NULL)
{
printf("加载失败!\n");
exit(0);
}
while(new_node!=NULL)
{
fprintf(fp,"%-15s%-14ld%-9s%-8d%-8d%-14ld%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-4.1f%-4.1f%-4.1f%-4.1f%-4.1f\n",new_node->name,new_node->num,new_node->sex,new_node->age,new_node->bir,new_node->tel,new_node->score[0],new_node->score[1],new_node->score[2],new_node->score[3],new_node->score[4],new_node->sum,new_node->ave,new_node->gpa[0],new_node->gpa[1],new_node->gpa[2],new_node->gpa[3],new_node->gpa[4]);
new_node = new_node->next;
}
fclose(fp);
}
stu *read(void) //从文件中读取信息并创建链表
{
stu* head,*node,*new_node;
FILE *fp;
fp=fopen("os.txt","r");
if((fp==NULL))
{
printf("加载失败!\n");
exit(0);
}
head = node = (stu *)malloc(SI);
new_node = (stu *)malloc(SI);
fscanf(fp,"%s %ld %s %d %d %ld %f %f %f %f %f %f %f %f %f %f %f %f",new_node->name,&new_node->num,new_node->sex,&new_node->age,&new_node->bir,&new_node->tel,&new_node->score[0],&new_node->score[1],&new_node->score[2],&new_node->score[3],&new_node->score[4],&new_node->sum,&new_node->ave,&new_node->gpa[0],&new_node->gpa[1],&new_node->gpa[2],&new_node->gpa[3],&new_node->gpa[4]);
while(!feof(fp))
{
node->next = new_node;
node = new_node;
new_node = (stu *)malloc(SI);
fscanf(fp,"\n%s %ld %s %d %d %ld %f %f %f %f %f %f %f %f %f %f %f %f",new_node->name,&new_node->num,new_node->sex,&new_node->age,&new_node->bir,&new_node->tel,&new_node->score[0],&new_node->score[1],&new_node->score[2],&new_node->score[3],&new_node->score[4],&new_node->sum,&new_node->ave,&new_node->gpa[0],&new_node->gpa[1],&new_node->gpa[2],&new_node->gpa[3],&new_node->gpa[4]);
}
node->next = NULL;
free(new_node);
fclose(fp);
return(head);
}
stu *findnum(void) //其中num为要查找的学生的学号
{
long num;
printf("查找的学号:");
scanf("%ld",&num);
stu *node;
node = read();
while (node->next!=NULL)
{
node = node->next;
if (node->num == num)
{ printf(PT);
printf(ET);
return node;
}
}
printf("学生信息未找到!\n");
return NULL;
}
stu *findname(void) //其中num为要查找的学生的姓名
{
char name[20];
printf("查找的姓名:");
scanf("%s",name);
stu *node;
node = read();
int cmp;
while (node->next!=NULL)
{
node = node->next;
cmp = strcmp(name,node->name);
if(cmp == 0)
{ printf(PT);
printf(ET);
return node;
}
}
printf("学生信息未找到!\n"