1.通讯管理系统
(虽然是C语言大作业但是用的有一点点CPP语法,因为基本用到的都是面向过程的思想所以差别不大,好久没用CPP写了因此巩固一下):
#include<iostream>
using namespace std;
#include<string>
struct person
{
//定义结构体
string name;
string sex;
int age;
int tele;
string adderss;
};
struct addressbook
{
struct person people[10];
int num_count = 0;
};
void show_Meau()
{
cout << "******************************" << endl;
cout << "**********1.添加联系人********" << endl;
cout << "**********2.显示联系人********" << endl;
cout << "**********3.删除联系人********" << endl;
cout << "**********4.查找联系人********" << endl;
cout << "**********5.修改联系人********" << endl;
cout << "**********6.清空联系人********" << endl;
cout << "**********0.退出通讯录********" << endl;
cout << "******************************" << endl;
cout << "--请输入相应的数字选择功能!--" << endl;
}
void addPerson(struct addressbook* p)
{
if (p->num_count == 10)
{
cout << "通讯录已满" << endl;
}
else
{
cout << "请输入姓名:" << endl;
cin >> p->people[p->num_count].name;
cout << "请输入性别:" << endl << "1--男" << endl << "2--女" << endl;
cin >> p->people[p->num_count].sex;
cout << "请输入年龄:" << endl;
cin >> p->people[p->num_count].age;
cout << "请输入联系方式:" << endl;
cin >> p->people[p->num_count].tele;
cout << "请输入住址:" << endl;
cin >> p->people[p->num_count].adderss;
p->num_count++;
}
}
void disPlay(struct addressbook* p,int num_count)
{
//执行显示操作
if (num_count == 0)
{
cout << "通讯录为空!" << endl;
}
else
{
for (int i = 0; i < num_count; i++)
{
cout << "姓名:" << p->people[i].name << " 性别:" << p->people[i].sex << " 年龄:" << p->people[i].age << " 电话:" << p->people[i].tele << " 家庭住址:" << p->people[i].adderss << endl;
}
}
}
void dele_Person(struct addressbook* p, int num_count)
{
cout << "请输入您要删除的用户名:" << endl;
string de_user;
cin >> de_user;
for (int i = 0; i < num_count; i++)
{
for (int j = 1; j <= num_count - i; j++)
{
if (de_user == p->people[i].name)
{
p->people[i] = p->people[i + j];
cout << "删除完毕!" << endl;
return ;
}
}
}
cout << "未找到用户名!" << endl;
}
void find_Person(struct addressbook* p, int num_count)
{
cout << "请输入您要查找的用户名:" << endl;
string fi_user;
cin >> fi_user;
for (int i = 0; i < num_count; i++)
{
if (fi_user == p->people[i].name)
{
cout << "您要查找的信息如下所示:" << endl;
cout << "姓名:" << p->people[i].name << " 性别:" << p->people[i].sex << " 年龄:"
<< p->people[i].age << " 电话:" << p->people[i].tele << " 家庭住址:" << p->people[i].adderss << endl;
return;
}
cout << "未找到该用户名!" << endl;
}
}
void revise_Person(struct addressbook* p, int num_count)
{
cout << "请输入您要修改的用户信息" << endl;
string re_user;
cin >> re_user;
for (int i = 0; i < num_count; i++)
{
if (re_user == p->people[i].name)
{
cout << "请重新输入姓名:" << endl;
cin >> p->people[i].name;
cout << "请重新输入性别:" << endl << "1--男" << endl << "2--女" << endl;
cin >> p->people[i].sex;
cout << "请重新输入年龄:" << endl;
cin >> p->people[i].age;
cout << "请重新输入联系方式:" << endl;
cin >> p->people[i].tele;
cout << "请重新输入住址:" << endl;
cin >> p->people[i].adderss;
cout << "修改成功!" << endl;
return;
}
cout << "未找到该用户名!" << endl;
}
}
void clear_Person(struct addressbook* p, int num_count)
{
p->num_count = 0;
cout << "数据已经清空完毕!" << endl;
}
int main()
{
show_Meau();
struct addressbook userview;
userview.num_count = 0;
int a = 0;
while (1)
{
//show_Meau();
cin >> a;
if (a == 0)
{
cout << "退出程序!" << endl;
break;
}
if (a == 1)
{
addPerson(&userview);
continue;
}
if (a == 2)
{
disPlay(&userview, userview.num_count);
continue;
}
if (a == 3)
{
dele_Person(&userview, userview.num_count);
userview.num_count--;
continue;
}
if (a == 4)
{
find_Person(&userview, userview.num_count);
continue;
}
if (a == 5)
{
revise_Person(&userview, userview.num_count);
continue;
}
if (a == 6)
{
clear_Person(&userview, userview.num_count);
continue;
}
//system("cls");
}
system("pause");
return 0;
}
2.源文件翻译(从源文档中找出所输入字符的翻译)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int index = 0;//计算单词个数
struct myDirctor
{
char* word;
char* trans;
};
typedef struct myDirctor mdir;
void showFilenumber()
{
FILE* fp1 = fopen("dict.txt", "r");//读文件
if (!fp1)
return -1;
char arr[1024];
while (!feof(fp1))
{
fgets(arr, 1024, fp1);
index++;
}//读取文件行数
fclose(fp1);
}
void printfFile()//打印单词数目,提示用户操作
{
printf("你所查询的字典共有单词:%d,请输入您要查询的单词:\n", index);
}
void readFile(mdir** m1)//读取内容
{
*m1 = (mdir *)malloc(sizeof(mdir) * index);
FILE* fp = fopen("dict.txt", "r");//读文件
if (!fp)
return -1;
char buffer[1024];
index = 0;
while (!feof(fp))
{
memset(buffer, 0, 1024);
fgets(buffer, 1024, fp);//从打开的文件中读取内容放入BUFFER
(*m1+index)->word = (char*)malloc(strlen(buffer) + 1);
memset((*m1 + index)->word, 0, strlen(buffer) + 1);
strcpy((*m1 + index)->word, &buffer[1]);//将buffer中的内容放入开辟的堆空间中
memset(buffer, 0, 1024);
fgets(buffer, 1024, fp);
(*m1 + index)->trans = (char*)malloc(strlen(buffer) + 1);
strcpy((*m1 + index)->trans, buffer);//将buffer中的内容放入开辟的堆空间中
index += 1;
}
printfFile();//打印单词数目,提示用户操作
fclose(fp);
}
void findFilecontent(mdir* m1,int i)
{
char iword[30];
memset(iword, 0, 30);
scanf("%[^\n]", iword);
for (int j = 0; j < i; j++)
{
//按照已经存储好的字典中的有限字符比较并且判断二者长度是否相等,以此来作为判断条件
if ((!strncmp(m1[j].word, iword, strlen(m1[j].word) - 1)) && (strlen(iword) + 1) == strlen(m1[j].word))
{
printf("%s\n", m1[j].trans);
break;
}
if (j == i - 1)
{
printf("未找到!");
}
}
}
int main()
{
showFilenumber();//计算文件中的单词个数
mdir* m1 = (mdir*)malloc(sizeof(mdir) * index);//开辟结构体空间
readFile(&m1);//读取文件中内容
findFilecontent(m1, index);//查找文件中内容
for (int j = 0; j < index; j++)//释放开辟的堆空间
{
free(m1[j].trans);
free(m1[j].word);
}
free(m1);
return 0;
}
本次小作业注意事项:
即怎么释放子函数中开辟的空间呢? 通过二级指针来接收子空间中开辟的空间,之后释放
就行了
3.贪吃蛇
(可以选择分文件编写,但是为了方便上传就写在一个文件中)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<conio.h>
#include<Windows.h>
#define LSIZE 60
#define WSIZE 25
int grade = 0;//分数
int speedSnake = 300;//控制速度
struct snakeAddress//蛇的位置坐标
{
int x;
int y;
};
struct Snake
{
struct snakeAddress snakeHead[1200];//蛇头
int snakeSize;//蛇身体的长度
}s,temps;
struct snakeFood
{
int x1;//食物的坐标
int y1;
}f;
enum moveDir//枚举
{
top = 'W', bottom = 'S', left = 'A', right = 'D'
};
//初始化蛇
void initSnake()
{
s.snakeHead[0].y = WSIZE / 2;
s.snakeHead[0].x = LSIZE / 2;
s.snakeHead[1].y = WSIZE / 2;
s.snakeHead[1].x = LSIZE / 2 + 1;
s.snakeSize = 2;
}
//初始化食物
void initfood()
{
f.x1 = rand() % (LSIZE-2)+1;
f.y1 = rand() % (WSIZE-2)+1;
}
//界面初始化
void initScreen()
{
for (int i = 0; i <= WSIZE; i++)
{
for (int j = 0; j <= LSIZE; j++)
{
if (i == 0 || i == WSIZE)
printf("_");
else if (j == 0 || j == LSIZE)
printf("|");
else
putchar(' ');
}
printf("\n");
}
}
void initCursor()
{
//初始化蛇头的坐标
COORD coord;
for (int i = 0; i < s.snakeSize; i++)
{
coord.X = s.snakeHead[i].x;
coord.Y = s.snakeHead[i].y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
if (i == 0)
putchar('@');
else
putchar('*');
}
//初始化蛇尾的坐标
coord.X = temps.snakeHead[temps.snakeSize - 1].x;
coord.Y = temps.snakeHead[temps.snakeSize - 1].y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
putchar(' ');
//生成食物的坐标
coord.X = f.x1 - 1;
coord.Y = f.y1 - 1;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
printf("#");
//初始化结束后的光标
coord.X = LSIZE;
coord.Y = WSIZE;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
printf("\n");
}
void controlSnake()
{
char ch = 'A';
//以蛇头和墙壁是否碰撞作为条件
while (s.snakeHead[0].x < LSIZE && s.snakeHead[0].x > 0 && s.snakeHead[0].y < WSIZE && s.snakeHead[0].y > 0)
{
temps = s;
initCursor();//更新坐标
//initScreen();//
//蛇头和身体碰撞
for (int i = 1; i < s.snakeSize; i++)
{
if (s.snakeHead[0].x == s.snakeHead[i].x && s.snakeHead[0].y == s.snakeHead[i].y)
return;
}
//蛇遇到食物的时候
if (s.snakeHead[0].x == (f.x1-1) && s.snakeHead[0].y == (f.y1-1))
{
s.snakeSize++;//蛇身增长
initfood();//产生新的食物
grade += 10;//得分增加
speedSnake -= 30;//速度
}
//移动蛇的位置
if(_kbhit())
ch = _getch();
switch (ch)//蛇进行移动,并对蛇和食物进行重定义
{
case top:
s.snakeHead[0].y -= 1;
for (int i = 1; i < s.snakeSize; i++)
{
s.snakeHead[i] = temps.snakeHead[i - 1];
}
break;
case bottom:
s.snakeHead[0].y += 1;
for (int i = 1; i < s.snakeSize; i++)
{
s.snakeHead[i] = temps.snakeHead[i - 1];
}
break;
case left:
s.snakeHead[0].x -= 1;
for (int i = 1; i < s.snakeSize; i++)
{
s.snakeHead[i] = temps.snakeHead[i - 1];
}
break;
case right:
s.snakeHead[0].x += 1;
for (int i = 1; i < s.snakeSize; i++)
{
s.snakeHead[i] = temps.snakeHead[i - 1];
}
break;
default:
break;
}
Sleep(speedSnake);
}
}
//显示得分
void printfGrade()
{
printf("%d\n\n\n", grade);
}
int main()
{
//去除光标
CONSOLE_CURSOR_INFO cci;
cci.bVisible = sizeof(cci);
cci.dwSize = FALSE;
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci);
srand((unsigned int)time(NULL));//导入随机数种子
initScreen();//初始化
initSnake();//初始化蛇
initfood();//初始化食物
//initSnakeCursor();//
//initfoodCursor();
initCursor();//初始化光标
controlSnake();//控制
//pritnf("%d,%d\n", s.snakeHead[0].x, s.snakeHead[0].x);
printfGrade();//显示得分
//initendCursor();
system("pause");
return 0;
}
新知识点:
头文件conio.h头文件
所用到的内置函数
1._getch() 即获取从输入设备输入的字符
2._kbhit() 非阻塞读取,即不会有光标停顿,我们一般在命令框中的输入都是阻塞读取,中途会有停顿等待下一次读取,因为返回值是整型数字0,1因此可以用于作为条件判读,为0时代表无阻塞输入,为1时代表有阻塞输入。
3.COORD结构体,用于重定位光标,他有两个参数,分别为x,y,通过重新设置这两
个参数可以让光标定位到指定位置; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
可以理解为固定格式,即将coord类型的变量中的X,Y赋值,使得光标重新定位。与
上述中的COORD结构体是一起使用的。
4.CONSOLE_CURSOR_INFO结构体,用于隐藏光标,使用格式如上述主函数所示,
其中.dwSize()内置函数可用于光标的显示和隐藏,为FALSE时隐藏,为TRUE时显示。
4.简易计算器(进制转化和四则运算)
简易功能基本都有,但是程序内容较为繁琐,之后有时间了会进行优化
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
enum conversionNumber
{
one = 1,two,three,four
};
void initScreen()
{
printf("=========================================\n");
printf("========进制转换器/计算器================\n");
printf("========1.进制转换器(2,10,16) ========\n");
printf("========2.计算器 ================\n");
printf("请输入您想使用的工具(序号): \n");
}
void scanfNum(int* a)
{
scanf("%d", a);
}
void binarySystem()//二进制转换
{
system("cls");
char arr[50] = { 0 };
int sum = 0;
int num = 0;
printf("请输入二进制数字:\n");
scanf("%s", arr);
//二进制转八进制
int c = strlen(arr);
char arr1[50] = { 0 };//存储进行补零后的临时字符数组
if (strlen(arr) % 3 == 1)//4位比对,因此先将缺失的位数补齐
{
for (int k = 0; k < 47; k++)
{
arr1[0] = '0';
arr1[1] = '0';
arr1[k + 2] = arr[k];
}
for (int k = 0; k < 50; k++)
{
arr[k] = arr1[k];
}
}
if (strlen(arr) % 3 == 2)//4位比对,因此先将缺失的位数补齐
{
for (int k = 0; k < 48; k++)
{
arr1[0] = '0';
arr1[k + 1] = arr[k];
}
for (int k = 0; k < 50; k++)
{
arr[k] = arr1[k];
}
}
int result_2to8 = 0;
char arr3[50] = { 0 };
int count_2to8 = 0;
for (int i = 0; i < strlen(arr); i = i + 3)
{
int arr2[10] = { 0 };//存储转换后的数组
//将字符数组中的字符转化为内容同大小的整型
arr2[result_2to8] = arr[i] - '0';
arr2[result_2to8 + 1] = arr[i + 1] - '0';
arr2[result_2to8 + 2] = arr[i + 2] - '0';
for (int j = 2; j >= 0; j--)
{
result_2to8 += arr2[j] * pow(2, 2 - j);
}
switch (result_2to8)
{
case 0:
arr3[count_2to8] = '0';
break;
case 1:
arr3[count_2to8] = '1';
break;
case 2:
arr3[count_2to8] = '2';
break;
case 3:
arr3[count_2to8] = '3';
break;
case 4:
arr3[count_2to8] = '4';
break;
case 5:
arr3[count_2to8] = '5';
break;
case 6:
arr3[count_2to8] = '6';
break;
case 7:
arr3[count_2to8] = '7';
break;
default:
break;
}
result_2to8 = 0;
count_2to8++;
}
printf("二进制转换为八进制为:%s\n", arr3);
int a = strlen(arr);
for (int i = 0; i <= strlen(arr); i++)
{
if (arr[i] == '0')
num = 0;
else
{
num = 1;
sum = sum + pow(2, a - 1);
}
a--;
}
printf("二进制转化为十进制为:%d\n", sum);
//将二进制转换为十六进制
int b = strlen(arr);
char ch1[50] = { 0 };//存储进行补零后的临时字符数组
if (strlen(arr) % 4 == 1)//4位比对,因此先将缺失的位数补齐
{
for (int k = 0; k < 47; k++)
{
ch1[0] = '0';
ch1[1] = '0';
ch1[2] = '0';
ch1[k + 3] = arr[k];
}
for (int k = 0; k < 50; k++)
{
arr[k] = ch1[k];
}
}
if (strlen(arr) % 4 == 2)//4位比对,因此先将缺失的位数补齐
{
for (int k = 0; k < 48; k++)
{
ch1[0] = '0';
ch1[1] = '0';
ch1[k + 2] = arr[k];
}
for (int k = 0; k < 50; k++)
{
arr[k] = ch1[k];
}
}
if (strlen(arr) % 4 == 3)//4位比对,因此先将缺失的位数补齐
{
for (int k = 0; k < 49; k++)
{
ch1[0] = '0';
ch1[k + 1] = arr[k];
}
for (int k = 0; k < 50; k++)
{
arr[k] = ch1[k];
}
}
//位数补齐后,进行运算操作
int result = 0;
char ch3[50] = { 0 };
int count_2to16 = 0;
for (int i = 0; i < strlen(arr); i = i + 4)
{
int ch2[10] = { 0 };//存储转换后的数组
ch2[result] = arr[i + 3] - '0';
ch2[result + 1] = arr[i + 2] - '0';
ch2[result + 2] = arr[i + 1] - '0';
ch2[result + 3] = arr[i + 0] - '0';
for (int j = 3; j >= 0; j--)
{
result += ch2[j] * pow(2, j);
}
switch (result)
{
case 0:
ch3[count_2to16] = '0';
break;
case 1:
ch3[count_2to16] = '1';
break;
case 2:
ch3[count_2to16] = '2';
break;
case 3:
ch3[count_2to16] = '3';
break;
case 4:
ch3[count_2to16] = '4';
break;
case 5:
ch3[count_2to16] = '5';
break;
case 6:
ch3[count_2to16] = '6';
break;
case 7:
ch3[count_2to16] = '7';
break;
case 8:
ch3[count_2to16] = '8';
break;
case 9:
ch3[count_2to16] = '9';
break;
case 10:
ch3[count_2to16] = 'A';
break;
case 11:
ch3[count_2to16] = 'B';
break;
case 12:
ch3[count_2to16] = 'C';
break;
case 13:
ch3[count_2to16] = 'D';
break;
case 14:
ch3[count_2to16] = 'E';
break;
case 15:
ch3[count_2to16] = 'F';
break;
default:
break;
}
result = 0;
count_2to16++;
}
printf("二进制转换为十六进制为:%s", ch3);
}
void decimalSystem()//十进制转换
{
system("cls");
int num = 0;
printf("请输入十进制数字:\n");
scanf("%d", &num);
int i = 0;
int index = 0;
int temp = 0;
int tempNum = num;
int arr[50] = { 0 };
while (num > 0)
{
arr[i] = num % 2;
num = num / 2;
i++;
index++;
}
printf("十进制转二进制为:");
for (int i = index - 1; i >= 0; i--)
{
printf("%d", arr[i]);
}
printf("\n");
i = 0;
index = 0;
temp = 0;
num = tempNum;
memset(arr, 0, 50);
while (num > 0)
{
arr[i] = num % 8;
//printf("%d\n", arr[i]);
num = num / 8;
i++;
index++;
}
printf("十进制转八进制为:");
for (int i =index - 1; i >=0; i--)
{
printf("%d", arr[i]);
}
printf("\n");
i = 0;
index = 0;
temp = 0;
num = tempNum;
memset(arr, 0, 50);
while (num > 0)
{
arr[i] = num % 16;
//printf("%d\n", arr[i]);
num = num / 16;
i++;
index++;
}
printf("十进制转十六进制为:");
for (int i = index - 1; i >= 0; i--)
{
if (arr[i] > 9)
{
switch (arr[i])
{
case 10:
printf("%c", 'A');
break;
case 11:
printf("%c", 'B');
break;
case 12:
printf("%c", 'C');
break;
case 13:
printf("%c", 'D');
break;
case 14:
printf("%c", 'E');
break;
case 15:
printf("%c", 'F');
break;
default:
break;
}
}
else
printf("%d", arr[i]);
}
}
void hexadecimalSystem()//十六进制转换
{
system("cls");
int arr_16 = 0;
printf("请输入十六进制数字:\n");
scanf("%d", &arr_16);
int temp_arr_16 = arr_16;//用于临时存储一下输入的数字
int count_arr_16 = 0;//判断输入的十六进制数字的位数
//十六进制转十进制
while (arr_16 != 0)
{
arr_16 /= 10;
count_arr_16++;
}
arr_16 = temp_arr_16;
//对输入的数字进行拆分
int cout_Number = pow(10, count_arr_16 - 1);
//定义一个数组用于存储拆分出来的数字,数组序号为大小顺序
int arr_16_div[20] = { 0 };
int i = 0;
int sum_10 = 0;
while (cout_Number)
{
arr_16_div[i] = arr_16 / cout_Number;
arr_16 = arr_16 % cout_Number;
cout_Number /= 10;
i++;
}
int maxsize = i;
for (int j = i - 1; j >= 0; j--)
{
sum_10 += arr_16_div[j] * pow(16, i - 1 - j);
}
printf("十六进制转十进制为:%d\n", sum_10);
int temp_sum_10 = sum_10;
i = 0;
int index = 0;
int temp = 0;
int arr_16_10[50] = { 0 };
while (sum_10 > 0)
{
arr_16_10[i] = sum_10 % 8;
//printf("%d\n", arr[i]);
sum_10 = sum_10 / 8;
i++;
index++;
}
printf("十六进制转八进制为:");
for (int i = index - 1; i >= 0; i--)
{
printf("%d", arr_16_10[i]);
}
printf("\n");
//十六进制转二进制 ,这里偷懒直接用之前计算的十进制数进行计算,也可以用switch语句进行比对
i = 0;
index = 0;
temp = 0;
sum_10 = temp_sum_10;
int arr_16_2[50] = { 0 };
while (sum_10 > 0)
{
arr_16_2[i] = sum_10 % 2;
sum_10 = sum_10 / 2;
i++;
index++;
}
printf("十进制转二进制为:");
for (i = index - 1; i >= 0; i--)
{
printf("%d", arr_16_2[i]);
}
printf("\n");
}
void conversionNum()
{
system("cls");
printf("请输入您需要进行转换的进制类型:\n");
printf("1.二进制转八进制、十进制、十六进制\n");
printf("2.十进制转二进制、八进制、十六进制\n");
printf("3.十六进制转二进制、八进制、十进制\n");
int num = 0;
scanf("%d", &num);
if(num == 1)//二进制
{
binarySystem();
}
else if (num == 2)//十进制
{
decimalSystem();
}
else if (num == 3)//十六进制
{
hexadecimalSystem();
}
}
void coutNum()//计算器
{
system("cls");
int num = 0;
int num1 = 0;
int num2 = 0;
printf("请输入您需要进行计算的类型:\n");
printf("1.加法 2.乘法 3.除法 4.加法\n");
scanf("%d", &num);
switch (num)
{
case 1:
printf("请输入第一个数字:\n");
scanf("%d", &num1);
printf("请输入第二个数字:\n");
scanf("%d", &num2);
printf("表达式为:%d + %d = %d", num1, num2, num1 + num2);
break;
case 2:
printf("请输入第一个数字:\n");
scanf("%d", &num1);
printf("请输入第二个数字:\n");
scanf("%d", &num2);
printf("表达式为:%d - %d = %d", num1, num2, num1 - num2);
break;
case 3:
printf("请输入第一个数字:\n");
scanf("%d", &num1);
printf("请输入第二个数字:\n");
scanf("%d", &num2);
if (num2 == 0)
{
printf("输入错误!第二个数字不能为0");
break;
}
printf("表达式为:%d / %d = %d", num1, num2, num1 / num2);
break;
case 4:
printf("请输入第一个数字:\n");
scanf("%d", &num1);
printf("请输入第二个数字:\n");
scanf("%d", &num2);
printf("表达式为:%d * %d = %d", num1, num2, num1 * num2);
break;
default:
break;
}
}
int main()
{
int numUser = 0;
initScreen();//初始化界面
scanfNum(&numUser);//用户输入数字选择工具
switch (numUser)
{
case 1:
conversionNum();
break;
case 2:
coutNum();
break;
default:
break;
}
return 0;
}
补充5:C语言学生管理系统
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//成绩管理系统
//1.增删查改
//2.文件存储信息
//全局变量
int select_System;//进入界面选择管理系统定义的选择变量
int allstu_Number;//记录全体学生人数
Stu student_view[1024] = { 0 };//定义学生数组,存储学生信息
//全局函数声明
//void initScreen();//初始化界面
void stuManager_Screen();//学生个人信息管理系统界面
void add_stuViews();//增加学生个人信息
void del_stuViews();//删除学生个人信息
void find_stuViews();//查找学生个人信息
void change_stuViews();//修改学生个人信息
void show_allStu();//显示全部学生信息
int main()
{
//initScreen();//初始化界面
stuManager_Screen();//初始化界面
return 0;
}
void stuManager_Screen()
{
system("cls");
printf("******您已经成功进入学生管理界面!*******\n");
printf("*************1.增加学生信息**************\n");
printf("*************2.删除学生信息**************\n");
printf("*************3.查找学生信息**************\n");
printf("*************4.更改学生信息**************\n");
printf("*************5.显示全部学生信息**********\n");
printf("*************0.退出当前系统**************\n");
printf("************返回上一级:请输入 0*********\n");
printf("******请输入对应序号进入对应系统:*******\n");
scanf("%d", &select_System);
switch (select_System)
{
case 1:
add_stuViews();//增
break;
case 2:
del_stuViews();//删
break;
case 3:
find_stuViews();//查
break;
case 4:
change_stuViews();//改
break;
case 5:
show_allStu();//显示所有学生信息
break;
default:
break;
}
}
void add_stuViews()
{
system("cls");
int temp_allstu_Number = 0;//用于存储本次添加个数的变量
int i = 0;//用于记录第xx名学生的局部变量
printf("请输入增加学生总数:\n");
scanf("%d", &temp_allstu_Number);
if (temp_allstu_Number == 0)
{
stuManager_Screen();
exit(0);
}
allstu_Number += temp_allstu_Number;
Stu** s1 = (Stu**)malloc(sizeof(Stu*) * temp_allstu_Number);
if (!s1)
return;
FILE* fp = fopen("studentviews.txt", "a");//写入学生信息文件
if (!fp)
{
printf("文件打开失败!");
return;
}
while (i<allstu_Number)
{
s1[i] = (Stu*)malloc(sizeof(Stu));
if (!s1[i])
return;
printf("请输入第%d名学生的姓名:\n",i+1);
scanf("%s", s1[i]->name);
printf("请输入第%d名学生的年龄:\n", i + 1);
scanf("%d", &s1[i]->age);
printf("请输入第%d名学生的学号:\n", i + 1);
scanf("%s", s1[i]->id);
getchar();
printf("请输入第%d名学生的性别(男/女):\n", i + 1);
scanf("%s", s1[i]->sex);
printf("请输入第%d名学生的电话:\n", i + 1);
scanf("%s", s1[i]->tele);
printf("请输入第%d名学生的成绩(语数英):\n", i + 1);
scanf("%d %d %d", &s1[i]->score[0], &s1[i]->score[1], &s1[i]->score[2]);
fprintf(fp, "%s %s %d %s %s %d %d %d\n", s1[i]->id, s1[i]->name, s1[i]->age,s1[i]->sex, s1[i]->tele, s1[i]->score[0], s1[i]->score[1], s1[i]->score[2]);
++i;
}
fclose(fp);
//释放堆空间
for (int i = 0; i < allstu_Number; i++)
{
if (!s1[i])
{
free(s1[i]);
s1[i] = NULL;
}
}
if (!s1)
{
free(s1);
s1 = NULL;
}
}
void del_stuViews()
{
system("cls");
FILE* fp = fopen("studentviews.txt", "r");
FILE* fp1 = fopen("tempstudentviews.txt", "w");
if (fp == NULL || fp1 == NULL)
{
printf("打开保存文件失败!");
return;
}
char buffer[1024] = { 0 };
printf("请输入删除学生的个人学号:");
char stu_id[9];
scanf("%s", &stu_id);
if (strcmp(stu_id,"0") == 0)
{
stuManager_Screen();
exit(0);
}
while (!feof(fp))
{
memset(buffer, 0, 1024);
fgets(buffer, 1024, fp);
if (!strncmp(buffer, stu_id, 8))
{
continue;
}
fputs(buffer, fp1);
}
fclose(fp);
fclose(fp1);
remove("studentviews.txt");
rename("tempstudentviews.txt", "studentviews.txt");
printf("删除成功!");
}
void find_stuViews()
{
system("cls");
FILE* fp = fopen("studentviews.txt", "r");
if (fp == NULL)
{
printf("打开保存文件失败!");
return;
}
char buffer[1024] = { 0 };
printf("请输入查找的学生的个人学号:");
char stu_id[9];
scanf("%s", &stu_id);
if (strcmp(stu_id, "0") == 0)
{
stuManager_Screen();
exit(0);
}
while (!feof(fp))
{
memset(buffer, 0, 1024);
fgets(buffer, 1024, fp);
if (strncmp(buffer, stu_id, 8) == 0)
{
printf("%s\n", buffer);
fclose(fp);
return;
}
}
fclose(fp);
printf("查无此人!");
}
void change_stuViews()
{
system("cls");
FILE* fp = fopen("studentviews.txt", "r");
FILE* fp1 = fopen("tempstudentviews.txt", "a");
if (fp == NULL || fp1 == NULL)
{
printf("打开保存文件失败!");
return;
}
char buffer[1024] = { 0 };
printf("请输入修改的学生的个人学号:");
char stu_id[9];
scanf("%s", &stu_id);
if (strcmp(stu_id, "0") == 0)
{
stuManager_Screen();
exit(0);
}
while (!feof(fp))
{
memset(buffer, 0, 1024);
fgets(buffer, 1024, fp);
if (!strncmp(buffer, stu_id, 8))
{
continue;
}
fputs(buffer, fp1);
}
fclose(fp);
Stu* s1 = (Stu*)malloc(sizeof(Stu));
if (!s1)
return;
printf("请输入该名学生的姓名:\n");
scanf("%s", s1->name);
printf("请输入该名学生的年龄:\n");
scanf("%d", &s1->age);
printf("请输入该名学生的学号:\n");
scanf("%s", s1->id);
getchar();
printf("请输入该名学生的性别(男/女):\n");
scanf("%s", s1->sex);
printf("请输入该名学生的电话:\n");
scanf("%s", s1->tele);
printf("请输入该名学生的成绩(语数英):\n");
scanf("%d %d %d", &s1->score[0], &s1->score[1], &s1->score[2]);
fprintf(fp1, "%s %s %d %s %s %d %d %d\n", s1->id, s1->name, s1->age, s1->sex, s1->tele, s1->score[0], s1->score[1], s1->score[2]);
fclose(fp1);//释放内存
if (!s1)
{
free(s1);
s1 = NULL;
}
remove("studentviews.txt");
rename("tempstudentviews.txt", "studentviews.txt");
printf("修改成功!");
}
void show_allStu()
{
system("cls");
FILE* fp = fopen("studentviews.txt", "r");
if (!fp)
{
printf("保存文件打开失败!");
return;
}
char buffer[1024];
while (!feof(fp))
{
memset(buffer, 0, 1024);
fgets(buffer, 1024, fp);
printf("%s", buffer);
allstu_Number++;
}
printf("共有学生人数为:%d\n", allstu_Number);
fclose(fp);
}